使用apache2(ubuntu)为phpRESTful服务器提供服务


Serve php RESTful server with apache2 (ubuntu)

我有一台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>

在我的公共目录中,我有.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,因为您需要加载一些envs变量。

然后是配置问题。

您正在定义两个基于命名的虚拟主机,一个名称为www.vlio20_paka.com,一个名为www.vlio20_lb.com。第一个是先定义的,所以如果您使用未知名称,默认情况下会使用它。

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

http://MACHINE_IP/lbServer

HTTP查询中使用的Host标头是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指令只是简单地告诉Apachehttp://www.vlio20_paka.com/以及请求http://www.vlio20_paka.com/otherSite都指向/var/www/html/otherSite/目录,可能不是您想要做的。

Alias只是在url到文件系统映射上定义某种url符号链接的一种方法。

现在让我们来看看第二个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>

因此,在这里您在/var/www/lbserver/public设置了一个DocumentRoot,但也通过Alias告诉Apachehttp://www.vlio20_lb.com/lbServer/指向与http://www.vlio20_lb.com/.

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

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

更改:

<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

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

相关文章: