Dro*_*dOS 2 php reverse-proxy nginx
我在下面给出了/etc/nginx/sites-available/default
文件的摘要
server {
listen 443 ssl;
server_name example.com;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ = 404;
}
location /rproxy/ {
proxy_pass https://example.org:8144/;
}
location ~ \.php$ {
try_files $uri = 404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
....
}
Run Code Online (Sandbox Code Playgroud)
该example.org:8144
服务器
有文件和
index.php
- 返回hello Worldbonjour.php
- 返回bonjour现在问题是:
如果我浏览https://example.com/rproxy
它,请立即返回hello world - 预期结果.
但是,如果我浏览https://example.com/rproxy/bonjour.php
(甚至https://example.com/rproxy/index.php
)我得到一个404 error
.
我明白这里发生了什么.我的Nginx配置导致Nginx的example.com实例尝试查找*.php
本地(即打开example.com
)的所有文件,当我正在寻找的文件实际打开时,该文件失败example.org:8144
.
我想有一种相对简单的方法可以判断Nginx
何时不尝试执行PHP
文件 - 当它实际上是在rproxy上时.但是,我对Nginx
confugration的了解太有限了,我无法弄清楚我是如何改变配置的.对于任何可能告诉我如何更改配置以防止这种情况发生的人,我最有责任.
我应该在这里澄清一些事情:
我需要能够在运行PHP脚本两个服务器 example.com
和example.org
.
这里有一个非常简单的解决方法 - 我使用不同的扩展名,例如php5,用于代理服务器上的php脚本,example.org.但是,这容易导致不可预见的问题.
对于nginx regexp,位置的优先级高于前缀位置.但
如果最长匹配前缀位置具有"^〜"修饰符,则不检查正则表达式.
所以试着替换
location /rproxy/ {
Run Code Online (Sandbox Code Playgroud)
同
location ^~ /rproxy/ {
Run Code Online (Sandbox Code Playgroud)