猿问

用于PHP后端和JS前端的NGINX配置

我正在尝试在/下提供我的前端应用程序,但对/ oauth2的请求会传递到php后端。这是我最新的nginx配置尝试:


upstream dockerphp {

    server backendphp:9000;

}


server {

    listen       80;

    server_name  localhost;

    index index.html;

    root   /application/frontend/build;


    location /oauth2 {

        root   /application/public;

        index index.php;

        try_files $uri $uri/ /index.php$is_args$args;

        #try_files /index.php$is_args$args =404;


        location ~ \.php$ {

            include /etc/nginx/fastcgi_params;


            fastcgi_split_path_info ^(.+\.php)(/.+)$;

            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

            fastcgi_param PATH_INFO $fastcgi_path_info;

            fastcgi_pass  dockerphp;

            fastcgi_index index.php;

        }

    }


    location / {

        try_files $uri $uri/ /index.html;

    }

}

我已经尝试过几乎所有我能想到的配置组合,但都无法使其正常工作。大多数情况下,我最终使用404。


我的nginx和php docker容器都安装了相同的/ application目录。


使用上面的配置,对/ oauth2 / blah的任何请求都将被底部的位置块接收,因此将返回我的前端。这可能是我最大的问题-在我看来/ oauth2位置块更“特定”,那么为什么不“获胜”呢?


我尝试使用注释掉的try_files行(以查看index.php是否为“后备”值对特异性有影响),nginx才开始下载index.php文件,而不是传递请求。帮助?


侃侃无极
浏览 209回答 3
3回答

GCT1015

这是我使用的方法:尝试先提供js /静态页面如果1.)失败,则传递到PHP后端定义处理.php的位置 upstream dockerphp {        server backendphp:9000;    }    server {        listen           80;        server_name      localhost;        index            index.html;        root             /application/frontend/build;        location / {            try_files    $uri $uri/ @php;        }        location @php {            root         /application/public;            index        index.php;            try_files    $uri $document_root/index.php?$query_string;             # $document_root/index.php is the important part due to how root and alias directives work        }        location ~ \.php$ {            include      /etc/nginx/fastcgi_params;            fastcgi_split_path_info ^(.+\.php)(/.+)$;            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;            fastcgi_param PATH_INFO $fastcgi_path_info;            fastcgi_pass  dockerphp;            fastcgi_index index.php;        }    }

UYOU

作为参考,我最终找到了一个简单的工作解决方案(如下)。upstream dockerphp {    server backendphp:9000;}server {    listen       80;    server_name  localhost;    index        index.html;    root         /application/frontend/build;    location / {        try_files $uri $uri/ /index.html;    }    location /oauth2 {        try_files $uri $uri/ @php;    }    location @php {        include                  /etc/nginx/fastcgi_params;        fastcgi_pass             dockerphp;        fastcgi_param            SCRIPT_FILENAME /application/public/index.php;    }}
随时随地看视频慕课网APP
我要回答