站点根目录上的Wordpress重定向循环。 Nginx代理apache

时间:2012-09-03 20:13:48

标签: wordpress apache web-applications nginx

我正在设置Nginx作为服务Wordpress安装的apache2的代理。问题是在根URL url appsrd.devmbs.com上获得重定向循环。当我点击服务器时,我在日志中看到以下12-15次。

127.0.0.1 - - [03/Sep/2012:12:29:25 +0000] "GET /index.php HTTP/1.0" 301 529 "http://appsrd.devmbs.com/wp-admin/options-general.php" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1"

但/ wp-admin效果很好。没有重定向问题。我尝试删除数据库,虽然数据库不可用,但根显示错误信息建立数据库连接,这很好,因为这是预期的行为,但没有重定向问题。然后我再次创建了数据库并运行了wordpress设置,当一切都完成后,重定向问题又回来了。

Beloe my nginx server conf:

server {
        listen       80 default_server;
        server_name  appsrd.devmbs.com;
        root /home/ubuntu/projecs/APPS-RD;
        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   /home/ubuntu/projects/APPS-RD;
            index  index.html index.htm index.php;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        location ~ \.php$ {
        proxy_pass   http://127.0.0.1:3000;
        proxy_buffering on;
        proxy_buffers 12 12k;
        proxy_set_header Host $host;
        }
}

网址为appsrd.devmbs.com,appsrd.devmbs.com / wp-admin工作正常。

任何人都知道可能会发生什么?

3 个答案:

答案 0 :(得分:8)

对于任何未来可能遇到此问题的人......

  1. 走这条路并不是最实际的做法。
  2. 我决心让它成功。
  3. 出于我的实验目的,我希望Nginx显示任何和所有现有的非PHP文件,并将PHP文件和动态URL代理到Apache for WordPress来完成它的工作。我还希望WordPress能够使用正常的.htaccess文件。

    Luis原始发布的初始代码的问题是Nginx明确声明使用index.php,因为它是WordPress环境中唯一的索引。结果是,当你去“domain.com/”时,Nginx将其发送给Apache,看起来就像“domain.com/index.php”。当WordPress收到“domain.com/index.php”时,它会自动缩短并重定向到“domain.com/”;因此你最终得到了那个循环。

    适用于WordPress环境的最佳工作(针对确定的)也是将任何目录发送到WordPress。此设置的缺点是它将忽略任何不是index.php的索引。

    server {
            listen       80;
        server_name  domain.com;
        root   /path/to/web/root/;
    
    
        # Proxy anything that isn't a file.
        location / {
            try_files $uri @apache;
        }
    
        # Proxy directories (This fixes the loop)
        # This will kill any other indexes like index.html if they're not explicitly used in the URL.
        location ~[^?]*/$ {
            include proxy_apache;
        }
    
        # Proxy any .php file.
        location ~ \.php$ {
            include proxy_apache;
        }
    
            # Proxy to apache, used by location / {...}
        location @apache {
            include proxy_apache;
        }
    
        # this will prevent files like .htaccess .htpassword .secret etc from being served
        # You can remove the log directives if you wish to
        # log any attempts at a client trying to access a hidden file
        location ~ /\. {
            deny all;
            access_log off;
            log_not_found off;
        }   
    }
    

    如果您注意到名为* proxy_apache *的文件的内容,其中包含多次,

    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host $host;
    proxy_pass http://127.0.0.1:8080;
    

    同样,不一定是最实用的解决方案,但它确实具有以下优点:

    1. 使用Nginx显示任何非PHP文件,而不必在正则表达式中定义静态文件的显式列表。
    2. 使用WordPress的心爱的.htaccess文件;虽然在初始设置后你不太可能改变.htaccess文件。

答案 1 :(得分:1)

我想和卢卡斯做同样的事情,我让它发挥作用。这是我的会员的一个基本例子。

# A basic configuration with reverse proxy to apache2

server {
  listen 80;

  server_name someurl.com www.someurl.com;

  root /var/www/someurl.com/html/;

  index index.php index.html index.html;

  access_log /var/log/nginx/someurl.com.access.log;
  error_log /var/log/nginx/someurl.com.error.log;

  # send anything with .php in it to apache
  location ~* \.php$ {
    try_files /dev/null @proxy;
  }

  # for everything else, 
  location / {
    try_files $uri $uri/ @proxy;
    error_page 404 = @proxy;
  }

  # Deny access to all dotfiles
  location ~ /\. {
    deny all;
  }

  # Named location for reverse proxy
  location @proxy {
    if ( $uri = /index.php ) {
      rewrite /index.php / break;
    }
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host $host;
    proxy_pass http://127.0.0.1:8080;
  }
}

# need to add https support

关键是我的@proxy位置内的if语句。我检查$ uri并将请求URI重写回/使用break标志。这避免了重定向循环。

奇怪的是,问题只发生在根索引上,而不是在子目录索引上。我很感激我的配置反馈。它可能有我尚未发现的问题,但截至目前,它为我提供了WordPress部署所需的功能。

GL!

答案 2 :(得分:0)

使用Nginx + php-fpm

时,我放弃了Nginx + Apache