zoukankan      html  css  js  c++  java
  • [转]Nginx调用远程php-fpm

    Nginx调用远程php-fpm

    前后端分离的网站,要在异地部署多套网页的时候,这种nginx配置调用远程php-fpm的方式,不错。可以提高网页的相应速度。

    原文: https://www.cnblogs.com/feiyafeiblog/p/6938515.html

    --------------------------------------------------------------------------------------------------------

    在Nginx服务器的情况下,当我们输入 http://localhost:8080/index.php回车的时候

    浏览器会将请求发送给Nginx,Nginx会根据我们所配置的以.php结尾的PHP的文件交给fastcgi

    复制代码
      location ~ .php {
                root           /nginx;
                fastcgi_pass   127.0.0.1:9000;         
                fastcgi_index  index.php;
              fastcgi_split_path_info ^(.+.php)(.*)$;     
             fastcgi_param PATH_INFO $fastcgi_path_info;    
                fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
               include /usr/local/etc/nginx/fastcgi.conf;
            
            }
    复制代码

    通过fastcgi_pass命令将请求转发给fastcgi 即php-fpm;

    php-fpm是fastcgi的一种实现。

    一般我们会将收到的请求转发到本地,即php-fpm所监听的本地端口 127.0.0.1:9000

    如果我们想实现分布式,将我们的请求转发给远程的php-fpm来处理该怎么去实现呢?

       1.修改本地Nginx fastcgi_pass 监听的IP:端口

        fastcgi_pass 127.0.0.1:9000 修改为 x.x.x.x:9000

        其中x.x.x.x代表远程主机的IP地址

       2.修改远程php-fpm的所监听的IP:端口

       将远程的php-fpm所监听的IP:端口,由127.0.0.1:9000改为:0.0.0.0:9000

       

    127.0.0.1 代表本机

    0.0.0.0     代表所有本地地址,相当于一个集合:所有不清楚的主机和目的网络。这里的“不清楚”是指在本机的路由表里没有特定条目指明如何到达。

      如果我们不修改远程php-fpm监听的IP:端口为0.0.0.0:9000

      在本地直接访问  http://localhost:8081/index.php Nginx会报错出现 (其中x.x.x.x代表我远程主机地址)

      一般我们php-fpm没有启动的时候会抛出这个错误,但是我们的远程php-fpm明明已经开启了,所以无法连接到远程php-fpm所监听的地址。

    *84 kevent() reported that connect() failed (61: Connection refused)
    while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET /index.php HTTP/1.1",
    upstream: "fastcgi://x.x.x.x:9000", host: "localhost:8081"

      接下来我们将php-fpm监听的IP:端口改为:0.0.0.0:9000;重启php-fpm,然后我们继续访问 http://localhost:8081/index.php

    这时候浏览器出现了

    找不到文件?为什么呢?我接着分析Nginx的配置(其中x.x.x.x代表我的远程主机地址)

    复制代码
      location ~ .php {
                root           /nginx;
                fastcgi_pass   x.x.x.x:9000;         
                fastcgi_index  index.php;
              fastcgi_split_path_info ^(.+.php)(.*)$;     
             fastcgi_param PATH_INFO $fastcgi_path_info;    
                fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
               include /usr/local/etc/nginx/fastcgi.conf;
            
            }
    复制代码

    请特别注意”fastcgi_script_name”一行(黑体部分),PHP-CGI特别需要此行信息来确定PHP文件的位置。也就是说,当我们将请求转发给我们fastcgi(即php-fpm)的时候,会把所请求的文件确切路径也发给fastcgi(即php-fpm);

    假如我Nginx本地服务器根目录为/nginx,那么我所请求的index.php的绝对路径是/nginx/index.php,Nginx在将请求转发给远程php-fpm的时候,也会把这个路径发给远程php-fpm,远程php-fpm会根据这个路径/nginx/index.php找到index.php并且执行,将结果返回给本地Nginx服务器;这也就意味着我们远程php-fpm所在的主机必须存在路径为/nginx/index.php的文件才行,否则会报404的错误,文件不存在(即我们所看到的File not found.);

    接下来在根目录下建立nginx 并且在nginx内新建index.php

    cd /
    mkdir /nginx 建立nginx
    cd nginx
    touch index.php 创建文件
    vim index.php 编辑输入PHP代码

    我们在vim index.php编辑的时候输入如下代码:

    <?php
        
        echo 'remote php-fpm';
    ?>

    再次访问http://localhost:8081/index.php

    会出现如下的结果:

    成功访问。

    小结:

    1:远程php-fpm监听IP:端口 改为0.0.0.0:9000(端口可以适当修改,默认9000)

    2:要注意请求的文件路径地址要和本地服务器的根目录一直,否则会报404

  • 相关阅读:
    树莓派4B
    SpringBoot 自定义 info Actuator 原理
    RestTemplate翻译serviceId过程
    ISA, ABI, API区别
    01.编译器结构
    【Git123】Git SSH Key支持多账号
    【消息中间件123】Solace PubSub+ Event Broker介绍
    【ETL123】
    【Http123】Http Timeout
    【性能123】Linux性能之“平均负载”
  • 原文地址:https://www.cnblogs.com/oxspirt/p/9317298.html
Copyright © 2011-2022 走看看