Nginx 重定向而不是代理传递

Nginx 重定向而不是代理传递

我正在实验室将 Apache 更改为 Nginx,并且我们在子域下有很多项目,因此我使用一种方法,即每个子目录都有自己的服务器在高端口(8000 及以上)上运行,而 80 上的主服务器只是它们的代理。我的 80 服务器配置如下:

    include /etc/nginx/sites-enabled/*.conf;

    upstream php {
            server unix:/run/php-fpm.sock;
    }

    server {
            server_name example.com;
            listen 80;

            location / {
                    proxy_pass http://127.0.0.1:8000;
            }

            location /application {
                    proxy_pass http://127.0.0.1:8001;
            }

            location /phpmyadmin {
                    proxy_pass http://127.0.0.1:8002;
            }
    }

因此,我有三个另外的服务监听不同的端口,如下所示:

server {
        listen 8000;
        root /var/www/path/to/application;
        index index.php;

        location / {
                try_files $uri $uri/ /index.php?$args =404;
        }

        location ~ \.php$ {
                include fastcgi_params;
                fastcgi_pass php;
        }
}

第一个是 Wordpress 应用程序。出于某种原因,它会重定向到 127.0.0.1,而不是通过代理,而且在 localhost 上我没有运行任何程序,因此出现 404。但在另一个域上。比如什么?

8001 处的服务尚不存在。8002 处的服务是 phpmyadmin,运行方式如下:

server {
        listen 8002;
        root /var/www/path/to/phpmyadmin;
        index index.php;

        location / {
                try_files $uri $uri/ /index.php?$args =404;
        }

        location ~ \.php$ {
                include fastcgi_params;
                fastcgi_pass php;
        }
}

这个报错404,虽然文件存在,但至少没有重定向到127.0.0.1。Nginx没有报错,监听socket的PHP-FPM也没有报错。

什么是配置错误,我该如何修复那些奇怪的不一致的错误?

答案1

你不需要让你的配置那么复杂。试试这个方法:

include /etc/nginx/sites-enabled/*.conf;

upstream php {
        server unix:/run/php-fpm.sock;
}

server {
        server_name example.com;
        listen 80;

        location / {
                try_files $uri $uri/ /index.php?$args =404;
        }

        location /application {
                proxy_pass http://127.0.0.1:8001;
        }

        location /phpmyadmin {
                try_files $uri $uri/ /index.php?$args =404;
        }
        location ~ \.php$ {
                include fastcgi_params;
                fastcgi_pass php;
        }
}

相关内容