如何结合nginx-php服务器配置文件中合并“proxy_pass”和“fastcgi_pass”?

ohfgkhjo  于 2023-06-21  发布在  Nginx
关注(0)|答案(1)|浏览(142)

我想把所有以“/API”开头的请求传递给“127.0.0.1:9000”一个fastcgi进程。
php-fpm服务器的工作状态为127.0.0.1:9000。
首先,我像这样使用“proxy_pass”:

location /api/ {
    proxy_pass http://127.0.0.100/api/;
}

我尝试将请求传递到另一个服务器。然后使用“fastcgi_pass”将其传递到php-fpm服务进度:

server {
    listen       80;
    server_name  127.0.0.100;
    root x:xxxxx/;
    location /api/ {
        root   "x:xxxxx";
        try_files $uri $uri/ /index.php?$args;
        index  index.php;
    }
    location ~ \.php(.*)$ {
        try_files $uri $uri/ /index.php?$args;
        include fastcgi.conf;
        fastcgi_pass 127.0.0.1:9000;
    }
}

它现在运行得很好。但是它有什么方法可以直接配置它吗?
我需要补充问题的细节。入口文件“index.php”路径是“root/api/index.php”。

snz8szmq

snz8szmq1#

当使用PHP-FPMNGINX时,不需要为PHP脚本使用proxy_pass。您可以通过fastcgi_passPHP请求直接传递给PHP-FPM服务。这里是你可以如何设置它。
假设您需要将所有以"/api"开头的请求传递到"127.0.0.1:9000"(一个FastCGI进程),配置应该如下所示:

server {
      listen       80;
      server_name  127.0.0.1;
      root /path/to/your/application;
  
      location /api {
          try_files $uri $uri/ /index.php?$args;
      }
  
      location ~ ^/api/(.*\.php)(/.*)?$ {
          include fastcgi_params;
          fastcgi_split_path_info ^(.+\.php)(/.+)$;
          fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
          fastcgi_param SCRIPT_NAME $fastcgi_script_name;
          fastcgi_param PATH_INFO $fastcgi_path_info;
          fastcgi_pass 127.0.0.1:9000;
      }

      location ~ \.php$ {
          return 403;
      }
  }

此配置假定:
您的PHP-FPM正在"127.0.0.1:9000"上运行。您的所有PHP文件都位于"/api"下。在此配置中:
任何以"/api"开头的请求将首先查找现有的文件或目录(try_files $uri $uri/),如果找不到,则将其传递给"/index.php"
位置~ ^/api/(.*\.php)(/.*)?$块匹配"/api"下的任何PHP文件,并通过fastcgi_pass将请求传递给PHP-FPM
最后的位置~ \.php$块是不属于"/api"PHP文件的全部,拒绝使用403 HTTP状态代码进行访问。
请记住将"/path/to/your/application"替换为文件系统上PHP应用程序的实际路径。
请务必测试您的配置(nginx -t)并重新加载或重新启动NGINX以使更改生效。
另外,请注意,您可能需要根据特定的应用程序需求或其他服务器安全措施修改此配置。

相关问题