zoukankan      html  css  js  c++  java
  • nginx多版本PHP配置

    场景:在单机环境下,使用一个web服务器运行多个项目,不同的项目使用不同版本的PHP。

    前提:运行环境中已经安装了多个版本的PHP(本篇文章使用的是宝塔搭建的环境)。基于宝塔搭建的环境,nginx和PHP的安装目录均在/www/server/下。

    首先看下nginx配置文件所在位置,nginx.conf(主配置文件)在/www/server/nginx/conf/下。各个项目的配置文件在/www/server/panel/vhost/nginx/目录下。拿其中一个项目的配置文件举例,其内容如下:

    server
    {
        listen 8081;
        server_name skxxwms.com;
        index index.php index.html index.htm default.php default.htm default.html;
        root /www/wwwroot/skxx/public;
        
        #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
        #error_page 404/404.html;
        #SSL-END
        
        #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
        #error_page 404 /404.html;
        #error_page 502 /502.html;
        #ERROR-PAGE-END
        
        #PHP-INFO-START  PHP引用配置,可以注释或修改
        include enable-php-56.conf;
        #PHP-INFO-END
        
        #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
        include /www/server/panel/vhost/rewrite/skxxwms.com.conf;
        #REWRITE-END
        
        #禁止访问的文件或目录
        location ~ ^/(.user.ini|.htaccess|.git|.svn|.project|LICENSE|README.md)
        {
            return 404;
        }
        
        #一键申请SSL证书验证目录相关设置
        location ~ .well-known{
            allow all;
        }
        
        location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
            error_log off;
            access_log /dev/null;
        }
        
        location ~ .*.(js|css)?$
        {
            expires      12h;
            error_log off;
            access_log /dev/null; 
        }
        access_log  /www/wwwlogs/skxxwms.com.log;
        error_log  /www/wwwlogs/skxxwms.com.error.log;
    }
    

    上面文件中的内容重点关注 include enable-php-56.conf; 这一项。
    找到enable-php-56.conf配置文件:
    cd /www/server/nginx/conf/
    ls | grep enable-php-56.conf
    返回结果: enable-php-56.conf 打开文件,看到如下内容:

    location ~ [^/].php(/|$)
    {
        try_files $uri =404;
        fastcgi_pass  unix:/tmp/php-cgi-56.sock;
        fastcgi_index index.php;
        include fastcgi.conf;
        include pathinfo.conf;
    }
    

    看到这里,我们就明白了。nginx和php之间是怎么进行运行的:
    首先当一个http请求过来之后,nginx将请求路由到网站根目录下的index.php---->加载nginx的fast-cgi模块---->请求到达/tmp/php-cgi-56.sock---->php-fpm监听/tmp/php-cgi-56.sock---->php-fpm接收到请求,启用worker进程处理请求---->php-fpm处理完请求,返回给nginx---->nginx将结果通过http返回给浏览器。(对于fastcgi_pass这项配置来说,还可以使用127.0.0.1:9000这样的方式,意思就是nginx将http请求丢给9000端口,php-fpm监听9000端口来处理请求。保持fastcgi_pass的配置内容和php-fpm.conf里的listen配置项一致就行了)

    我们再来看php-fpm.conf中的内容:
    cd /www/server/php/56/etc/
    vim php-fpm.conf
    如下所示: listen项的配置和fastcgi_pass的配置是一致的!!

    [global]
    pid = /www/server/php/56/var/run/php-fpm.pid
    error_log = /www/server/php/56/var/log/php-fpm.log
    log_level = notice
    
    [www]
    listen = /tmp/php-cgi-56.sock
    listen.backlog = -1
    listen.allowed_clients = 127.0.0.1
    listen.owner = www
    listen.group = www
    listen.mode = 0666
    user = www
    group = www
    pm = dynamic
    pm.status_path = /phpfpm_56_status
    pm.max_children = 200
    pm.start_servers = 15
    pm.min_spare_servers = 15
    pm.max_spare_servers = 30
    request_terminate_timeout = 100
    request_slowlog_timeout = 30
    slowlog = var/log/slow.log
    

    上面location块里面的fastcgi_pass配置项就是指定不同php版本的地方。只不过宝塔给用户封装了一下,放到了/www/server/nginx/conf/目录下。该目录下有多个enable-php.conf这样的文件。

    于是,如果我们想让不同的项目使用不同版本的PHP的话,只需要在项目的配置文件中更改 include enable-php-56.conf; 这项配置就行了。重启nginx服务器之后就可以使用了。

  • 相关阅读:
    解压tar.gz文件报错gzip: stdin: not in gzip format解决方法
    通过 HTTP 头进行 SQL 注入(转)
    Android涉及到的设计模式(转)
    初探Java8中的HashMap(转)
    substance的使用示例(转)
    大数据量下高并发同步的讲解(不看,保证你后悔)(转)
    HDU 4812 D Tree 树分区+逆+hash新位置
    在weblogic11g发布该项目时遇到错误(不支持web-app_3_0)
    highchart几个图表马金摘要
    android 使用 service 实现音乐
  • 原文地址:https://www.cnblogs.com/lty-fly/p/12581698.html
Copyright © 2011-2022 走看看