我正在实验室将 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;
}
}