如何配置Nginx虚拟目录以访问Apache虚拟服务器?

时间:2017-12-18 22:35:52

标签: wordpress apache nginx

我有一个位于Nginx反向代理服务器后面的Django网站。我想用WordPress(WP)开始博客,所以我创建了一个运行WP的单独的LAMP服务器(使用PHP-FM)。我希望我网站上的博客URI是“mysite / blog”,以保持良好的SEO分数。为此,我创建了一个nginx虚拟子目录,指向我的LAMP服务器上的WP博客站点。但是当我尝试从我的网站连接到博客时,我一直收到404错误。我怀疑我需要修改我的Apache虚拟主机设置,但我无法弄清楚如何去做。

以下是我的Nginx配置文件的相关部分:

# /etc/nginx/sites-available/mysite.conf
server {
    listen 80;
    server_name web00.mysite.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    server_name web00.mysite.com;
    ...
    location /blog {
        proxy_pass https://cms00.mysite.com;
    }
}

以下是我的Apache配置文件的相关部分:

# /etc/apache2/sites-available/vhosts.conf
DirectoryIndex index.php index.html

<VirtualHost *:80>
  ServerName "cms00.mysite.com"
  Redirect permanent / https://cms00.mysite.com
</VirtualHost>

<VirtualHost *:443>
  ServerName "cms00.mysite.com"
  DocumentRoot "/var/www/html/mysite.com"
  ...
  <Directory "/var/www/html">
    AllowOverride All
    Options -Indexes -Includes +FollowSymLinks
    Require all granted
  </Directory>
  RewriteCond %{HTTP_HOST} !^www\. [NC]
  RewriteRule ^(.*)$ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>

请注意,WordPress建议您将WP安装到您网站的文档根目录(在我的案例中为/var/www/html/mysite.com),而不是单独的子目录,这就是我所做的。如果将WP安装到文档根目录下的自己的子目录中,许多WP插件将无法工作。

如果我在浏览器中输入“cms00.mysite.com/wp-login.php”,我会按预期获得Wordpress用户登录页面。但是,如果我输入“web00.mysites.com/blog”,我会得到WP的“糟糕!无法找到该页面。”错误。我可以在Apache日志中看到404错误:

... "GET /blog/ HTTP/1.0" 404 ...

我相信我理解为什么会这样。我的请求将作为https :: / cms00.mysite.com/blog传递给WP服务器。但是https://cms00.mysite.com指向包含所有WP文件的文档根/var/www/html/mysite.com。没有'blog'子目录。如果我创建一个,将HTML文件放入其中,然后刷新页面,我会看到该文件。

如何配置Nginx和/或Apache以便我可以使用URI https://web00.mysite.com/blog访问我的WP博客?

1 个答案:

答案 0 :(得分:0)

需要做三件事来完成这项工作。首先,您需要将以下行添加到WP服务器上的vhosts.conf文件中:

<VirtualHost *:443>
    ...
    Alias /blog "/var/www/html/mysite.com"
    ...
</VirtualHost>

接下来,您需要将以下.htaccess文件添加到WordPress根目录:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond $1 !^(wp-login\.php)
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>

最后,通过https://cms00.mysite.com/wp-admin登录WordPress管理员,转到常规设置,并确保这两个设置如下所示:

WordPress Address (URL): https://cms00.mysite.com/blog
Site Address (URL): https://cms00.mysite.com/blog