为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
侃侃无极 2021-05-13 18:18:15
我正在尝试在/下提供我的前端应用程序,但对/ 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文件,而不是传递请求。帮助?
查看完整描述

3 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

这是我使用的方法:

  1. 尝试先提供js /静态页面

  2. 如果1.)失败,则传递到PHP后端

  3. 定义处理.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;

        }

    }


查看完整回答
反对 回复 2021-05-21
?
UYOU

TA贡献1878条经验 获得超4个赞

作为参考,我最终找到了一个简单的工作解决方案(如下)。


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;

    }

}


查看完整回答
反对 回复 2021-05-21
  • 3 回答
  • 0 关注
  • 208 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信