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!

posted @ 2020-06-17 13:55  试试手气  阅读(523)  评论(0编辑  收藏  举报