php - 使用 apache2 (ubuntu) 为 php RESTful 服务器提供服务

标签 php apache unix ubuntu virtualhost

我有一台 ubuntu 机器,我想在其上运行一个 php rest 服务器。这是我的默认配置文件:

ServerName localhost
<VirtualHost *:80>
   DocumentRoot /var/www/html/otherSite
   ServerName www.vlio20_paka.com
   Alias /otherSite /var/www/html/otherSite
</VirtualHost>

<VirtualHost *:80>
  DocumentRoot /var/www/lbserver/public
  ServerName www.vlio20_lb.com
  Alias /lbServer /var/www/lbserver/public
  <Directory /var/www/lbserver/public>
     AllowOverride all
     DirectoryIndex index.php
     Require all granted
  </Directory>

</VirtualHost>

在我的公共(public)目录中,我有 .htaccess 文件:
<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

当我尝试访问服务器时 http://MACHINE_IP/lbServer我收到未找到错误。

我怎样才能让它工作
(每次更改配置文件后,我都在重新启动 apache)?

更新:
apache2 -t制作:
[Sun Jun 28 12:00:00.789522 2015] [core:warn] [pid 22089] AH00111: Config variable ${APACHE_LOCK_DIR} is not defined
[Sun Jun 28 12:00:00.789835 2015] [core:warn] [pid 22089] AH00111: Config variable ${APACHE_PID_FILE} is not defined
[Sun Jun 28 12:00:00.789970 2015] [core:warn] [pid 22089] AH00111: Config variable ${APACHE_RUN_USER} is not defined
[Sun Jun 28 12:00:00.790088 2015] [core:warn] [pid 22089] AH00111: Config variable ${APACHE_RUN_GROUP} is not defined
[Sun Jun 28 12:00:00.790240 2015] [core:warn] [pid 22089] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
[Sun Jun 28 12:00:00.794721 2015] [core:warn] [pid 22089:tid 140102153521024] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
[Sun Jun 28 12:00:00.795136 2015] [core:warn] [pid 22089:tid 140102153521024] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
[Sun Jun 28 12:00:00.795200 2015] [core:warn] [pid 22089:tid 140102153521024] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
AH00526: Syntax error on line 74 of /etc/apache2/apache2.conf:
Invalid Mutex directory in argument file:${APACHE_LOCK_DIR}

注:第一个站点加载正常,但第二个站点出现 404 错误。

最佳答案

首先,这几乎与 REST 问题无关。这是一个简单的配置错误。

二、对于apache2 -t你应该运行 . /etc/apache2/envvars之前,因为您需要加载一些环境变量。

然后是配置问题。

您正在定义 2 个基于命名的虚拟主机,其中 1 个名称为 www.vlio20_paka.com一个名称为 www.vlio20_lb.com .第一个是首先定义的,因此如果您使用未知名称,默认情况下将使用它。

当您以这种方式进行查询时:

http://MACHINE_IP/lbServer

HTTP 查询中使用的 Host header 是 MACHINE_IP ,所以它不是 www.vlio20_paka.com而不是 www.vlio20_lb.com .如果您没有其他默认虚拟主机(使用 apache2 -S 会找到),将使用第一个虚拟主机。

我们来看看第一个:
<VirtualHost *:80>
   DocumentRoot /var/www/html/otherSite
   ServerName www.vlio20_paka.com
   Alias /otherSite /var/www/html/otherSite
</VirtualHost>

如果我们掉到这里,在您的磁盘上搜索的路径将是 DocumentRoot + url , 所以 /var/www/html/otherSite/lbServer .您有一个 404 ,很可能这条路径不存在。

请注意,您的 Alias这里的指令只是告诉 Apache 一个对 http://www.vlio20_paka.com/ 的请求。并向 http://www.vlio20_paka.com/otherSite 提出请求都会指向 /var/www/html/otherSite/目录,也许不是你想做的。
Alias只是一种在 url-to-filesystem 映射上定义某种 url 符号链接(symbolic link)的方法。

现在让我们看看第二个 VirtualHost,只有在 HTTP 请求中使用正确的名称才能访问它,即不请求 http://MACHINE_IP/lbServer。但是 http://www.vlio20_lb.com/lbServer (为此,您可以在运行 http 查询的机器上的/etc/hosts 文件中添加一个条目)。
<VirtualHost *:80>
  DocumentRoot /var/www/lbserver/public
  ServerName www.vlio20_lb.com
  Alias /lbServer /var/www/lbserver/public
  <Directory /var/www/lbserver/public>
     AllowOverride all
     DirectoryIndex index.php
     Require all granted
  </Directory>

</VirtualHost>

因此,在这里您将 DocumentRoot 设置为 /var/www/lbserver/public也可以通过 Alias , 你告诉 Apache 一个请求到 http://www.vlio20_lb.com/lbServer/指向与 http://www.vlio20_lb.com/ 相同的条目.

您最好的解决方法是在 /etc/hosts 中添加一个条目a 请求您的测试网站使用真实姓名,以便您可以使用基于名称的 VirtualHosting。或者只使用一个 VirtualHost 并尝试使用别名,但这通常与生产设置相去甚远。

关于php - 使用 apache2 (ubuntu) 为 php RESTful 服务器提供服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31097920/

相关文章:

php - 为什么这个数组键被设置为零?

php - 将 reCAPTCHA 响应更改为alert(),而不是加载新页面

bash - 在带有路径的文件名前面添加 test_

shell - 在unix中使用 "find"命令时出错

php - 如何在 HTML 中嵌入简短的联系表格 7?

php - php composer.phar 安装错误

apache - 如何查找Tomcat服务器上运行了多少个网站?

Python CGI 抛出 500 内部服务器错误

apache - 使用持久连接的缺点?

linux - 替换平面文件中的第二行