Nginx - 不从反向代理调用PHP脚本

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 World
  • bonjour.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上时.但是,我对Nginxconfugration的了解太有限了,我无法弄清楚我是如何改变配置的.对于任何可能告诉我如何更改配置以防止这种情况发生的人,我最有责任.


我应该在这里澄清一些事情:

我需要能够在运行PHP脚本两个服务器 example.comexample.org.

这里有一个非常简单的解决方法 - 我使用不同的扩展名,例如php5,用于代理服务器上的php脚本,example.org.但是,这容易导致不可预见的问题.

Ser*_*ron 9

对于nginx regexp,位置的优先级高于前缀位置.但

如果最长匹配前缀位置具有"^〜"修饰符,则不检查正则表达式.

所以试着替换

location /rproxy/ {
Run Code Online (Sandbox Code Playgroud)

location ^~ /rproxy/ {
Run Code Online (Sandbox Code Playgroud)

  • 完善!如果我能给你10票,我会。 (2认同)