请问两个php版本如何实现在同一个系统内共存?

请问两个php版本如何实现在同一个系统内共存?,比如php5.6与php7,nginx怎么配置

阅读 2.4k
5 个回答

如果你想要快速在生产环境下实现多个网站应用使用多版本的php,其实市面上的现成的套件已经太多太多了,随便哪个都可以快速实现。

(但从个人角度,我不推荐也不会真的建议在任何生产环境下使用这类套件,年年被爆破的案例太多了)

Nginx + PHP 的组合里比较多见的是 Nginx + php-fpm 的组合,也有 Nginx + Apache(mod) 的,但那个就不展开了。在这种模式下, Nginx 其实就是个 http 的handler,接住请求和处理静态文件就可以,动态的文件其实全部发送给了 php-fpm 去处理,其实你想要实现多个共存,本质上是让 php-fpm 分别跑在不同的端口上就可以了。

随便你多少个版本的 php 都和 nginx 其实没太大关系,只要端口错开, nginx 都能处理。

一个demo配置

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000  
#  
location ~ \.php$ {  
root html;  
fastcgi_pass 127.0.0.1:9000;  
fastcgi_index index.php;  
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;  
include fastcgi_params;  
}

新的站点使用 9001 或者其他端口,只要不和已有端口冲突就可以了。

如果是编译的话,可以指定不同的输出文件夹。然后 fpm 通过指定不同的端口来实现。

如果是包管理。一般会有别名。比如 php -> php7.2 之类的。找找

  1. 不同版本的php安装时候会生成各自单独的目录,比如说/usr/local/php5.6/xxx,/usr/local/php7等等,另外真正处理nginx请求的,其实是php-fpm,他一般由端口或者sock文件的形态存在。从表现形式上来看不同的php版本对应的就是不同的端口或者sock文件。
  2. nginx中php的核心的转发配置项fastcgi_pass后面可以指定转发到对应的php的端口或者sock文件,也就是不同版本的php来处理相应的请求
  1. 编译时指定不同的 --prefix 目录前缀
  2. 启动php-fpm时, 如果用端口, 指定不同的端口
  3. 启动php-fpm时, 如果是用 unix sock, 指定不同的路径
  4. 在nginx.conf 中, proxy_pass 指定到你想启动的php-fpm端口(或sock文件)
    如果要按路径指定不同的版本, 使用 location 路径前缀

安装到不同目录
改配置和不同端口通信

Nginx监听不同端口就行了啊

思路就是这样的

我搞过

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏