永久链接问题 - 在NGINX上运行Wordpress,后面是反向代理,也是NGINX

时间:2017-02-13 06:33:20

标签: wordpress nginx

我有两个服务器实例在两个服务器上运行NGINX。

  1. NGINX-A,它是反向代理。它根据配置中的位置块将流量转发到不同的内部服务器
  2. NGINX-B是一个部署了所有PHP Web应用程序的服务器实例。
  3. 其他服务器实例
  4. 因此NGINX-A接收所有传入流量,将其重新路由到适当的服务器。 NGINX-B是在NGINX而不是Apache上运行的传统Wordpress主机。

    我正在尝试 postname permalinks 工作,但未能这样做。

    我目前的目录结构:

    /appl/wordpress/myblog == symbolic link ==> /usr/share/nginx/html/subdir/myblog
    

    这是我安装Wordpress的NGINX-B服务器上的当前配置。

    location /subdir/myblog/ {
         try_files $uri $uri/  /subdir/myblog/index.php?$args;
    }
    

    通过http://NGINX_B-ip_address/subdir/myblog访问它, postname永久链接普通永久链接。我必须在下面更新wp-config。

    define('WP_HOME', 'NGINX_B-ip_address')
    define('WP_SITEURL','NGINX_B-ip_address');
    

    现在,我有另一个nginx服务器作为反向代理,NGINX-A。

    location /{
        proxy_pass http://NGINX_B-internal_ip_address;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        #for wordpress
        proxy_set_header X-Forwarded-Proto $scheme;
    }
    

    我还必须使用新的主机名

    更新wp-config.php
    define('WP_HOME', 'http://NGINX-A-hostname/myblog')
    define('WP_SITEURL','http://NGINX-A-hostname/myblog');
    

    使用普通永久链接,我可以毫无问题地访问wp-admin。我也可以改变固定链接策略。

    如果我不使用普通固定链接,则整个过程会中断并继续出现404错误。

    1. http://NGINX-A-hostname/myblog - 作品
    2. http://NGINX-A-hostname/myblog/wp-admin - 完全有效
    3. http://NGINX-A-hostname/myblog/postname - 失败| 404
    4. http://NGINX-A-hostname/myblog/?p=postname - 完全有效
    5. 好像NGINX反向代理将请求转发为目录而不是参数。有什么建议吗?谢谢!

1 个答案:

答案 0 :(得分:0)

好我通过将此问题应用于NGINX-B服务器设法解决了我的问题

location /myblog {
        root /usr/share/nginx/html/subdir;
        try_files $uri $uri/  /myblog/index.php?$args;
        location  ~ \.php$  {
              fastcgi_split_path_info ^(.+\.php)(/.+)$;
              fastcgi_index   index.php;
              fastcgi_pass unix:/var/run/php5-fpm.sock;
              include /etc/nginx/fastcgi_params;
              fastcgi_param   SCRIPT_FILENAME $request_filename;
        }
}

我之前的配置是这样,但没有用。

location /subdir/myblog/ {
     try_files $uri $uri/  /subdir/myblog/index.php?$args;
}

这也行不通。不要在根条目处。 myblog部分不应该存在,myblog应该包含在try_files中。

location /myblog {
root /usr/share/nginx/html/subdir/myblog;
    try_files $uri $uri/  /index.php?$args;
    location  ~ \.php$  {
               fastcgi_split_path_info ^(.+\.php)(/.+)$;
               fastcgi_index   index.php;
               fastcgi_pass unix:/var/run/php5-fpm.sock;
               include /etc/nginx/fastcgi_params;
               fastcgi_param   SCRIPT_FILENAME $request_filename;
       }
}