月下无赖 發表於 2020-3-27 15:21:00

nginx多版本PHP配置

<h5 id="场景在单机环境下使用一个web服务器运行多个项目不同的项目使用不同版本的php" data-source-line="1">场景:在单机环境下,使用一个web服务器运行多个项目,不同的项目使用不同版本的PHP。</h5>
<p data-source-line="3">前提:运行环境中已经安装了多个版本的PHP(本篇文章使用的是宝塔搭建的环境)。基于宝塔搭建的环境,nginx和PHP的安装目录均在/www/server/下。</p>
<p data-source-line="5">首先看下nginx配置文件所在位置,nginx.conf(主配置文件)在/www/server/nginx/conf/下。各个项目的配置文件在/www/server/panel/vhost/nginx/目录下。拿其中一个项目的配置文件举例,其内容如下:</p>
<pre data-source-line="7"><code class="hljs"><span class="hljs-section">server
{
    <span class="hljs-attribute">listen <span class="hljs-number">8081;
    <span class="hljs-attribute">server_name skxxwms.com;
    <span class="hljs-attribute">index index.php index.html index.htm default.php default.htm default.html;
    <span class="hljs-attribute">root /www/wwwroot/skxx/public;
   
    <span class="hljs-comment">#SSL-START SSL<span class="zh-hans">相关配置,请勿删除或修改下一行带注释的404<span class="zh-hans">规则
    <span class="hljs-comment">#error_page 404/404.html;
    <span class="hljs-comment">#SSL-END
   
    <span class="hljs-comment">#ERROR-PAGE-START<span class="zh-hans">错误页配置,可以注释、删除或修改
    <span class="hljs-comment">#error_page 404 /404.html;
    <span class="hljs-comment">#error_page 502 /502.html;
    <span class="hljs-comment">#ERROR-PAGE-END
   
    <span class="hljs-comment">#PHP-INFO-STARTPHP<span class="zh-hans">引用配置,可以注释或修改
    <span class="hljs-attribute">include enable-php-<span class="hljs-number">56.conf;
    <span class="hljs-comment">#PHP-INFO-END
   
    <span class="hljs-comment">#REWRITE-START URL<span class="zh-hans">重写规则引用,<span class="zh-hans">修改后将导致面板设置的伪静态规则失效
    <span class="hljs-attribute">include /www/server/panel/vhost/rewrite/skxxwms.com.conf;
    <span class="hljs-comment">#REWRITE-END
   
    <span class="hljs-comment">#<span class="zh-hans">禁止访问的文件或目录
    <span class="hljs-attribute">location <span class="hljs-regexp">~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
    {
      <span class="hljs-attribute">return <span class="hljs-number">404;
    }
   
    <span class="hljs-comment">#<span class="zh-hans">一键申请SSL<span class="zh-hans">证书验证目录相关设置
    <span class="hljs-attribute">location <span class="hljs-regexp">~ \.well-known{
      <span class="hljs-attribute">allow all;
    }
   
    <span class="hljs-attribute">location <span class="hljs-regexp">~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
      <span class="hljs-attribute">expires      <span class="hljs-number">30d;
      <span class="hljs-attribute">error_log <span class="hljs-literal">off;
      <span class="hljs-attribute">access_log /dev/null;
    }
   
    <span class="hljs-attribute">location <span class="hljs-regexp">~ .*\.(js|css)?$
    {
      <span class="hljs-attribute">expires      <span class="hljs-number">12h;
      <span class="hljs-attribute">error_log <span class="hljs-literal">off;
      <span class="hljs-attribute">access_log /dev/null;
    }
    <span class="hljs-attribute">access_log/www/wwwlogs/skxxwms.com.log;
    <span class="hljs-attribute">error_log/www/wwwlogs/skxxwms.com.<span class="hljs-literal">error.log;
}
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<p data-source-line="60">上面文件中的内容重点关注<span class="Apple-converted-space">&nbsp;<code>include enable-php-56.conf;</code><span class="Apple-converted-space">&nbsp;这一项。<br>找到enable-php-56.conf配置文件:<br> <code>cd /www/server/nginx/conf/</code><br> <code>ls | grep enable-php-56.conf</code><br>返回结果:<span class="Apple-converted-space">&nbsp;<code>enable-php-56.conf</code><span class="Apple-converted-space">&nbsp;打开文件,看到如下内容:</span></span></span></span></p>
<pre data-source-line="67"><code class="hljs"><span class="hljs-attribute">location <span class="hljs-regexp">~ [^/]\.php(/|$)
{
    <span class="hljs-attribute">try_files <span class="hljs-variable">$uri =<span class="hljs-number">404;
    <span class="hljs-attribute">fastcgi_passunix:/tmp/php-cgi-56.sock;
    <span class="hljs-attribute">fastcgi_index index.php;
    <span class="hljs-attribute">include fastcgi.conf;
    <span class="hljs-attribute">include pathinfo.conf;
}
</span></span></span></span></span></span></span></span></span></code></pre>
<p data-source-line="77">看到这里,我们就明白了。nginx和php之间是怎么进行运行的:<br>首先当一个http请求过来之后,nginx将请求路由到网站根目录下的index.php----&gt;加载nginx的fast-cgi模块----&gt;请求到达/tmp/php-cgi-56.sock----&gt;php-fpm监听/tmp/php-cgi-56.sock----&gt;php-fpm接收到请求,启用worker进程处理请求----&gt;php-fpm处理完请求,返回给nginx----&gt;nginx将结果通过http返回给浏览器。(对于fastcgi_pass这项配置来说,还可以使用127.0.0.1:9000这样的方式,意思就是nginx将http请求丢给9000端口,php-fpm监听9000端口来处理请求。保持fastcgi_pass的配置内容和php-fpm.conf里的listen配置项一致就行了)</p>
<p data-source-line="80">我们再来看php-fpm.conf中的内容:<br><code>cd /www/server/php/56/etc/</code><br><code>vim php-fpm.conf</code><br>如下所示: listen项的配置和fastcgi_pass的配置是一致的!!</p>
<pre data-source-line="85"><code class="hljs">
pid = /www/server/php/<span class="hljs-number">56/var/run/php-fpm<span class="hljs-selector-class">.pid
error_log = /www/server/php/<span class="hljs-number">56/var/log/php-fpm<span class="hljs-selector-class">.log
log_level = notice


listen = /tmp/php-cgi-<span class="hljs-number">56<span class="hljs-selector-class">.sock
listen<span class="hljs-selector-class">.backlog = -<span class="hljs-number">1
listen<span class="hljs-selector-class">.allowed_clients = <span class="hljs-number">127.0.<span class="hljs-number">0.1
listen<span class="hljs-selector-class">.owner = www
listen<span class="hljs-selector-class">.group = www
listen<span class="hljs-selector-class">.mode = <span class="hljs-number">0666
user = www
group = www
pm = dynamic
pm<span class="hljs-selector-class">.status_path = /phpfpm_56_status
pm<span class="hljs-selector-class">.max_children = <span class="hljs-number">200
pm<span class="hljs-selector-class">.start_servers = <span class="hljs-number">15
pm<span class="hljs-selector-class">.min_spare_servers = <span class="hljs-number">15
pm<span class="hljs-selector-class">.max_spare_servers = <span class="hljs-number">30
request_terminate_timeout = <span class="hljs-number">100
request_slowlog_timeout = <span class="hljs-number">30
slowlog = var/log/slow<span class="hljs-selector-class">.log
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<p data-source-line="112">上面location块里面的fastcgi_pass配置项就是指定不同php版本的地方。只不过宝塔给用户封装了一下,放到了/www/server/nginx/conf/目录下。该目录下有多个enable-php.conf这样的文件。</p>
<p data-source-line="114">于是,如果我们想让不同的项目使用不同版本的PHP的话,只需要在项目的配置文件中更改<span class="Apple-converted-space">&nbsp;<code>include enable-php-56.conf;</code><span class="Apple-converted-space">&nbsp;这项配置就行了。重启nginx服务器之后就可以使用了。</span></span></p><br><br>
来源:https://www.cnblogs.com/lty-fly/p/12581698.html
頁: [1]
查看完整版本: nginx多版本PHP配置