• Nginx反向代理php的几种方式 白


    第一种: 传统的LNMP方式

    这种我称之为最古老的代理方式, 一般是流量入口放置一个Nginx, 然后proxy_pass到 Nginx + PHP的系统(Nginx解析http协议转发给fastcgi_pass交由php处理), 通常的配置如下: 每台PHP机器都会附加一个Nginx

    # 这里只是php机器的配置, 一般流量会通过前置的负载均衡/Nginx服务转发到此
    server {
        listen 80;
        server_name xxx.test.com;
    
        location / {
            try_files $uri $uri/ /index.php?$query_string;
        }
    
        location ~ \.php($|/) {
            # 设置项目根目录 chroot
            set $PROJECT_NAME "代码路径/public";
            include     fastcgi_params;
            fastcgi_pass  127.0.0.1:9000;   # 基于本地回环地址
            fastcgi_index  index.php;
            fastcgi_split_path_info ^(.+\.php)(.*)$;
            fastcgi_param  SCRIPT_FILENAME  $PROJECT_NAME$fastcgi_script_name;
        }
    }
    

    第二种: 远程代理方式

    何为远程代理,我给的定义是基于网络的代理方式简单来说是把PHP主机的Nginx拆分出去, PHP主机上就只有PHP服务,通过远程调用请求PHP。

    upstream test {
        192.168.10.100:9000  weight=100 max_fails=3 fail_timeout=30s;
    }
    
    server {
        listen 80;
        server_name xxx.test.com;
    
        location / {
            try_files $uri $uri/ /index.php?$query_string;
        }
    
        location ~ \.php($|/) {
            # 设置项目根目录
            set $PROJECT_NAME "代码路径/public";
            # 设置upstream_name
            set $fastcgi_name test;
    
            index index.php index.html index.htm;
            include     fastcgi_params;
            fastcgi_pass  $fastcgi_name;
            fastcgi_index  index.php;
            fastcgi_split_path_info ^(.+\.php)(.*)$;
            fastcgi_param  SCRIPT_FILENAME  $PROJECT_NAME$fastcgi_script_name;  # 指定项目根目录
    }
    
    tips:
        php-fpm的配置需要监听其他地址:
            listen = 127.0.0.1:9000             --> listen = :9000
            listen.allowed_clients = 127.0.0.1  --> ;listen.allowed_clients = 127.0.0.1
    
    • 这种方式有什么优势呢?
      • 收敛了Nginx服务和配置, php机器无需再安装Nginx服务, 便于配置统一管理
      • 配置可以托管于gitlab,变更可溯源/可评审,拒绝登录机器改动, 借助ansible+jenkins批量更新配置

    第三种: 更简单的代理方式

    upstream test {
        192.168.10.100:9000  weight=100 max_fails=3 fail_timeout=30s;
    }
    
    server {
        listen 80;
        server_name xxx.test.com;
    
        location /  {
    	    set $PROJECT_NAME "代码路径/public/index.php";
            fastcgi_pass  test;
            fastcgi_index  index.php;
            include     fastcgi_params;
            fastcgi_split_path_info ^(.+\.php)(.*)$;
            fastcgi_param  SCRIPT_FILENAME  $PROJECT_NAME;
        }
    }
    

    这种方式相较于第二种方式,少了一次内部重定向(try_files), 相同的是第二和第三种模式一定是针对前后端完全分离的前提下进行的。

  • 相关阅读:
    还原网站上被压缩的JS代码方便阅读
    让chrome浏览器变成在线编辑器
    awk之NF的妙用
    Xargs用法详解
    CU论坛常用知识点汇总
    awk中RS,ORS,FS,OFS区别与联系
    SHELL十三问[转载自CU论坛]
    关于shell中常见功能的实现方式总结
    shell实现ftp命令示例
    MySQL基础
  • 原文地址:https://www.cnblogs.com/chaizhenhua/p/16136198.html
Copyright © 2020-2023  润新知