【发布时间】:2018-02-19 14:51:13
【问题描述】:
我有以下设置
- 主服务器 - 称它为
https://master.com - 从服务器 - 称它为
https://slave.com
两者都在 Ubuntu 16.04 上运行 Nginx
在主服务器上,我在 /etc/nginx/sites-available/default 文件中创建了以下配置块
location /test
{
rewrite ^/test(.*) /$1 break;
proxy_pass https://slave.com;
proxy_read_timeout 240;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}
稍后master.comservice nginx reload 我可以执行以下操作
- 浏览到
https://master.com/test并查看slave.com\index.php的输出。 - 浏览到
https://master.com/test/test.txt并查看文件slave.com\test.txt中的文本 - 浏览到
https://master/com/test/test.jpg并查看文件slave.com\test.jpg中的图像。
但是,我无法执行以下任何操作
- 浏览到
https://master.com/test/test.php,而不是向我显示来自https://slave.com/test.php的输出,而是向我显示 404 错误消息 - 浏览到
https://master.com/test/adminer/adminer.php,https://slave.com/adminer/adminer.php向我显示了master.comi.e 上Adminer 实例的登录屏幕,而不是向我显示从属服务器上的Adminer 实例的登录屏幕。https://master.com/adminer/adminer.php
这显然是因为我在master.com 上的 Nginx 配置中遗漏了一些东西。但是,我看不出那可能是什么。
为了完整起见,这是我在两台服务器上的配置:
Ubuntu - 16.04.3 Nginx - 1.10.3 PHP - 7.0.22
我应该解释为什么需要^~,因为这在我最初的问题中并不清楚。我有另一个块设置来处理master.com 上的 PHP 脚本。
location ~ \.php$
{
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
由于 Nginx 处理这些指令的方式,该块在处理 .php 文件时具有优先权,而 master.com 最终会在本地查找实际上位于 slave.com 上的 .php 脚本。避免这种情况的唯一方法是使用^~
【问题讨论】:
标签: nginx reverse-proxy php-7