【问题标题】:Serve php RESTful server with apache2 (ubuntu)使用 apache2 (ubuntu) 为 php RESTful 服务器提供服务
【发布时间】:2015-09-14 20:50:00
【问题描述】:

我有一台 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
我收到 Not Found 错误。

我怎样才能让它工作 (每次更改配置文件后我都会重新启动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 错误。

【问题讨论】:

  • 重启你的apache服务器的命令是sudo service apache2 restart。只需重新加载您的配置(reload 而不是restart)也可能会起作用并且速度会稍快一些。
  • 我都做了,sudo service apache2 reload & sudo service apache2 restart
  • 这意味着除非这些命令产生错误消息,否则您的配置是有效的。请注意,Ubuntu 系统上没有httpd 二进制文件,它被称为apache2,一般不应直接调用。
  • 重启 = 停止 + 启动,重新加载 = 保持运行 + 重新读取配置文件。
  • @vlio20 linux 系统上的默认httpd.confapache.conf。你检查过第 74 行吗?

标签: php apache unix ubuntu virtualhost


【解决方案1】:

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

其次,对于apache2 -t,您应该先运行. /etc/apache2/envvars,因为您需要加载一些环境变量。

然后是配置问题。

您正在定义 2 个基于命名的虚拟主机,1 个名称为 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 指令只是告诉 Apache 对 http://www.vlio20_paka.com/ 的请求和对 http://www.vlio20_paka.com/otherSite 的请求都将指向 /var/www/html/otherSite/ 目录,可能不是您想要做的。

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

现在让我们看看第二个 VirtualHost,只有在 HTTP 请求中使用正确的名称才能访问它,它不是请求 http://MACHINE_IP/lbServer,而是请求 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>

因此,您在此处将 DocumentRoot 设置为 /var/www/lbserver/public,但还通过 Alias 告诉 Apache 对 http://www.vlio20_lb.com/lbServer/ 的请求指向与 http://www.vlio20_lb.com/ 相同的条目。

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

【讨论】:

    【解决方案2】:

    在没有看到更多配置的情况下我想到的唯一一件事。

    变化:

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

    收件人:

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

    【讨论】:

    • 它没有帮助。还有什么我可以做的或可以添加的细节吗?
    • 当您转到http://127.0.0.1/(或MACHINE_IP)时会发生什么。更改后您是否重新启动了apache? /path/to/httpd -t 也说吗?
    • 我在这台机器上有其他站点所以http://127.0.0.1/ (MACHINE_IP) 所以我的默认站点是可见的(静态站点)。请参阅 httpd -t 输出的问题
    • 我的etc/apache2目录下好像没有httpd.conf
    【解决方案3】:

    在 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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-21
      • 2020-03-10
      • 2012-11-19
      • 2012-06-25
      • 2016-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多