使用 apache2 (ubuntu) 服务 php RESTful 服务器

Serve php RESTful server with apache2 (ubuntu)

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

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 ^(.*)/$ / [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 错误。

我唯一想到的就是没有看到更多你的配置。

变化:

<Directory /lbserver>
    DirectoryIndex index.php
</Directory>

收件人:

<Directory /lbserver>
    DirectoryIndex index.php
    Require all granted
</Directory>

在 ubuntu 中没有二进制 httpd,而是使用 apache2:

ricardo@zeus:~$ httpd -t
No se ha encontrado la orden «httpd», quizás quiso decir:
 La orden «xttpd» del paquete «xtide» (universe)
 La orden «https» del paquete «httpie» (universe)
 La orden «http» del paquete «httpie» (universe)
httpd: no se encontró la orden
ricardo@zeus:~$ apache2 -t

现在,粘贴命令输出 ;-)

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

其次,对于 apache2 -t 你应该 运行 . /etc/apache2/envvars 之前,因为你需要加载一些 envs 变量。

然后是配置问题。

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

当您这样查询时:

http://MACHINE_IP/lbServer

您的 HTTP 查询中使用的主机 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/ and a request to http://www.vlio20_paka.com/otherSite 的请求将同时指向 /var/www/html/otherSite/ 目录,这可能不是您想要的。

Alias 只是一种在 url-to-filesystem 地图上定义某种 url 符号链接的方法。

现在让我们看看第二个 VirtualHost,只有在 HTTP 请求中使用正确的名称才能访问它,而不是请求 http://MACHINE_IP/lbServer but http://www.vlio20_lb.com/lbServer(为此,您可以在 /etc/hosts 文件,在机器上 运行 宁 http 查询)。

<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>

所以在这里您在 /var/www/lbserver/public 处设置了一个 DocumentRoot,而且,通过 Alias,您告诉 Apache 对 http://www.vlio20_lb.com/lbServer/ point to the same entry as http://www.vlio20_lb.com/.

的请求

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