代码改变世界
[登录 · 注册]
  • Linux 下 Nginx 与 PHP 的常用配置
  • 模拟场景

    模拟一个场景,一台服务器有两个独立项目(网站)ws1 和 ws2,服务器上用 Nginx 做 http 服务器,使用 php 处理动态内容

    Nginx

    Nginx默认配置文件在 /etc/nginx/nginx.conf,通过 include 同样可以引入很多具体配置便于分别对项目管理,include 默认路径在 /etc/nginx/conf.d。为每一个项目(网站)建立一个配置文件有利于清晰的分开配置文件作用范围,不会互相影响,为 ws1 建立一个 ws1-www.conf,一个简单的配置文件大概长这个样子

    server {
        #使用 one 这个缓存
            #proxy_cache    one;
            #proxy_cache_valid   any  10m;
    
            listen         80;
            server_name    ws1.domain.com;
            # upload_max_file_size  2M;   
            #client_max_body_size   10M;
    
            location / {
                root     /var/www/ws1;
                index    index.html;
    
                # try_files  $uri  $uri/  /index.php?$args;
            }
    
            # rewrite /admin$ $scheme://$host$uri/ permanent;
    
            # error_page   401 402 403 404 500 502 503 504  /oops.html;
            # location = /oops.html {
            #     root     ;
            # }
    
            location  ~.php$ {
                root            /var/www/ws1;
                fastcgi_pass    unix:/run/php-fpm/ws1.sock;
                #fastcgi_pass    127.0.0.1:9000;
                fastcgi_index   index.php;
                fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include         fastcgi_params;
            }
        }
    

    Nginx 安装后 conf.d 路径下默认有 php-fpm.conf 配置文件,用于配置 Nginx 与 PHP 的通讯方式,刚才 fastcgi_pass 指定了 cgi 的转发方式,可以是转发到 ip:port 也可以是 sock,以 sock 为例在 conf.d 路径下建立一个单独的对 sock 的配置,如 ws1-php.conf,内容可以是

    upstream ws1 {
            # ip_hash 算法使请求按照 ip 结果分配访问固定的一个后台服务,不能与 weight、backup 同时使用
            #ip_hash;
            server unix:/run/php-fpm/ws1.sock;
            server 192.168.1.101:8000;
            server 192.168.1.102:9000 weight=1;
    }
    

    关键信息如下:

    • name:用于标识服务器名称,这个服务器是指具体的网站、项目,因此存在多个 upstream 时,name 一定不要重复即可
    • server:可以是 sock、地址,表示访问其方式,因为 upstream 经常用于做负载均衡(百度得知),因此一个 upstream 中可以包含多个 server

    现在,在 conf.d 下使用 ws1-www.conf 和 ws1-php.conf 实现了对站点 ws1 的独立控制,如法炮制给 ws2 增加同样的两个配置文件即可,注意配置中所有ws1的具体值替换成ws2不能重复。站点的配置文件完成,还要检查主配置文件 /etc/nginx/nginx.conf 是否能正确的使用它们,关键是在文件中是否有这一句 include /etc/nginx/conf.d/*.conf;

    PHP-FPM

    Linux下是 php-fpm 在工作,其配置文件默认在 /etc/php-fpm.conf,其中 include 中记载了包含的其它配置文件的路径,默认为 /etc/php-fpm.d/*.conf,该目录下可建立多个与Web应用对应的配置文件,每个配置文件中关键信息如下:

    • [www] 应用池名称,和 IIS 中进程池类似,可以以项目命名,这样在本地(当前服务器)有多个web应用的情况下可以做到分别管理和识别
    • user= 指定本地系统用户名,group= 指定本地系统用户所属组名
    • listen=/run/php-fpm/*.sock 表示当前配置要监听的方式,可以是 sock 方式,也可以是 127.0.0.1:9002 这样的 IP 方式,要与 Web 服务器一致(如 Nginx 中的 fastcgi_pass)

    同样需要给 ws1 和 ws2 分别提供不同的配置文件,以 php-fpm.d 中默认配置文件为例,按刚才描述改写出两个配置文件分别对应 ws1 和 ws2

    [ws1]
    xxx
    user = nginx
    group = nginx
    listen=/run/php-fpm/ws1.sock
    xxx
    
    [ws2]
    xxx
    user = nginx
    group = nginx
    listen=/run/php-fpm/ws2.sock
    xxx
    

    至此,已经为 ws1 和 ws2 分别在 Nginx 和 php-fpm 都建立的独立的配置

    访问

    Nginx 的配置和 php-fpm 的相关配置能够找得到+对的上是配置的关键,nginx.conf 包含了 conf.d 中所有子项配置,/etc/php-fpm.ini 包含了 php-fpm.d 中所有子项配置,所有的子项配置又通过 ws1.sock、ws2.sock 的(或ip:port)方式通讯,这就是 Nginx 和 php 搭配的基本路径,配置好后测试配置是否正确并重启服务查看结果

    Nginx -t
    systemctl reload php-fpm
    systemctl reload nginx
    

    done!

  • 上一篇:vue实现分页功能
    下一篇:svn update时出现Checksum mismatch
  • 【推广】 阿里云小站-上云优惠聚集地(新老客户同享)更有每天限时秒杀!
    【推广】 云服务器低至0.95折 1核2G ECS云服务器8.1元/月
    【推广】 阿里云老用户升级四重礼遇享6.5折限时折扣!
  • 原文:https://www.cnblogs.com/cinlap/p/13152086.html
走看看 - 开发者的网上家园