如何在 Ubuntu 18.04 和 16.04 上使用 Nginx 安装多个 PHP 版本

2023-11-02

通常,网络托管管理器为每个 PHP 版本应用程序部署使用单独的服务器。这增加了托管成本。或者,您可以运行多个Docker多个 PHP 版本的容器。

本教程帮助您在具有不同 PHP 版本的 Nginx Web 服务器上安装和配置两个 VirtualHost。第一个 VirtualHost 将与 PHP 5.6 一起运行,另一个 VirtualHost 将与 PHP 7.2 一起运行。因此,只需完成本教程即可。您还可以根据需要将两个以上的 PHP 版本与 Nginx 一起使用,但本教程仅涵盖两个。

PHP安装

对于PHP版本的安装,我们使用这里维护的PPA。使用以下几个命令将 PPA 添加到您的系统。


sudo apt install python-software-properties
sudo add-apt-repository ppa:ondrej/php
  

在本教程中,我使用 PHP 5.6 和 PHP 7.2 来配置 Nginx Web 服务器。要使用多个 PHP 版本,我们将使用 PHP FPM 和 FastCGI。让我们在您的系统上安装以下软件包。


apt update
sudo apt install php5.6 php5.6-fpm
sudo apt install php7.2 php7.2-fpm
  

您可能还需要安装其他 PHP 模块。对于本教程,仅需要上述包。

安装完成后,php-fpm服务会自动启动。使用以下命令确保这两个服务正在运行。


sudo systemctl status php5.6-fpm
sudo systemctl status php7.2-fpm
  
  • 受到推崇的:如何在 Ubuntu 上启用/禁用 PHP 模块

Nginx 安装

Nginx Web 服务器软件包可在官方 Ubuntu 存储库中找到。在您的系统上启动终端或使用 ssh 登录远程系统。执行以下命令来安装 Nginx Web 服务器的最新可用版本。


sudo apt update 
sudo apt install nginx
  

Nginx 配置

准备好在 Nginx 服务器中配置网站。出于测试目的,我配置了两个网站以使用两个不同的 2 PHP 版本。首先,在服务器上创建两个目录。


sudo mkdir /var/www/php56
sudo mkdir /var/www/php72
  

现在,创建并索引.php含有phpinfo()功能。


echo "<?php phpinfo(); ?>" > /var/www/php56/index.php
echo "<?php phpinfo(); ?>" > /var/www/php72/index.php
  

之后,在 Nginx 上为两个站点创建服务器块。最新版本的 Nginx 将服务器块配置文件保留在 /etc/nginx/sites-available 目录下。为第一个虚拟主机创建一个文件,并在您喜欢的文本编辑器中进行编辑。


sudo vim /etc/nginx/sites-available/php56.example.com
  

添加以下内容。确保根据您的设置使用正确的服务器名称和目录路径。该网站配置为使用 PHP 5.6。


# Application with PHP 5.6
#
server {
	listen 80;

	root /var/www/php56;
	index index.php;
	server_name php56.example.com;

	location ~* \.php$ {
		# With php-fpm unix sockets
		fastcgi_pass unix:/var/run/php/php5.6-fpm.sock;
		include         fastcgi_params;
		fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
		fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
	}
}
  

同样,创建第二个 VirtualHost 配置文件以使用 PHP 7.2。在文本编辑器中编辑配置文件:


sudo vim /etc/nginx/sites-available/php72.example.com
  

使用正确的 ServerName 和 DocumentRoot 将以下内容添加到文件中。


# Application with PHP 7.2
#
server {
	listen 80;

	root /var/www/php72;
	index index.php;
	server_name php72.example.com;

	location ~* \.php$ {
		# With php-fpm unix sockets
		fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
		include         fastcgi_params;
		fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
		fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
	}
}
  

好吧,您已经在 Nginx 中创建了两个网站。但他们仍然不活跃。 Nginx 将活动站点保存在 /etc/nignx/sites-enabled 目录下。您可以简单地将两个配置文件创建到此目录的符号链接,或使用以下命令执行相同的操作。


sudo ln -s /etc/nginx/sites-available/php56.example.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/php72.example.com /etc/nginx/sites-enabled/
  

完成所有更改后,重新启动 Nginx 以重新加载新的设置更改。


sudo systemctl restart nginx.service
  

您的设置现已完成。转到下一步来测试您的设置。

测试设置

全做完了。您可以在您最喜欢的网络浏览器中访问双方。你会看到php56.example.com显示版本PHP 5.6 and php72.example.com正在显示PHP 7.2作为配置。

恭喜,您的系统已准备好托管具有不同 PHP 版本的网站。愉快的主持。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Ubuntu 18.04 和 16.04 上使用 Nginx 安装多个 PHP 版本 的相关文章

  • SQLSTATE[HY000] [2002] 资源暂时不可用 - mysql - innodb 和 pdo

    在我的错误日志中得到大量结果 如下所列 数据库中的所有表都是 innodb 并且就与这些表的任何交互而言 一切都是带有准备好的语句的 pdo 正如我所说 所有错误几乎与下面列出的错误相同 但发生在几个不同的页面上 无论页面如何 错误行始终指
  • 如何改进 PHP 分页算法?

    我正在研究 PHP 中的分页算法 我可以猜测它需要改进的空间 所以我想对如何改进它有一些想法 无论是从 UI UX 的角度清理代码本身 还是你能想到的任何其他东西 该算法应输出如下所示的分页 1 2 3 6 7 8 97 98 99 or
  • 使用 PHP 分割逗号分隔名称

    我的名字格式为姓氏 名字 在我的数据库中 第一个和最后一个字段都有不同的字段 我想使用 PHP 读取逗号之前的所有内容作为姓氏 以及逗号之后的所有内容作为名字 实现这一目标的最佳方法是什么 list Lastname Firstname e
  • 如何在 SQLite 中获取最后插入的 ID?

    SQLite 中是否有任何内置函数可以获取最后插入的行 ID 例如 在 mysql 中我们有LAST INSERT ID 这种功能 对于 sqlite 任何可用于执行相同过程的函数 请帮我 Thanks SQLite 这可以使用SQLite
  • 如果端口不是 80,.htaccess 重定向到错误页面

    我正在运行一个便携式服务器 http www server2go web de 通过 USB 棒 问题是我还在我的本地计算机上安装了 WAMP 并且 Apache 不知何故在 Windows 启动时启动 因为一些我现在不记得的随机原因并且无
  • 提交简单 PHP 表单时出现禁止错误

    我有一个不复杂的问题 这似乎比应有的更复杂 我有一个简单的表单 用于向网站添加内容 有些字段需要输入html 然而 当您在表单的不同部分输入某些 html 元素时 它会认为它讨厌您并抛出禁止的 403 错误 这是下面的表格
  • 使用 PHP 创建、编辑和删除 crontab 作业?

    是否可以使用 PHP 创建 编辑和删除 crontab 作业 我知道如何列出 Apache 用户当前的 crontab 作业 output shell exec crontab l echo output 但是如何使用 PHP 添加 cro
  • 与 PHP 相比,Python 与 HTML 的“流畅”程度如何?

    我正在考虑从使用 PHP 切换到使用 Python 来开发 Web 应用程序 但我想知道 Python 是否像 PHP 一样擅长在 HTML 中穿插 本质上 我发现它使用起来非常简单 直观将 PHP 放在我想要的位置 然后可以随意安排 组织
  • 项目链接在 Wamp 服务器上不起作用

    我正在另一台计算机上安装 Wamp 服务器来运行中型数据库和 UI 我已成功阻止 IIS 并将服务器路由到 Localhost 8080 但是每当我尝试从 localhost 主页访问我的项目时 在 www 文件中 我被重定向到页面未找到错
  • 在 PHP 中使用可变变量是不好的做法吗?

    例如 一个简单的MVC类型系统 api class method使用重写为 PHP 变量 htaccess nginx conf 然后做类似的事情
  • phpenmod 显示其他 php 版本的路径

    我的 Ubuntu 机器上安装了 php 7 0 和 7 2 当我执行时php v 它告诉我我正在使用 php 7 2 在 Apache 上我还启用了 php 7 2 当我跑步时phpenmode zip 我明白了 WARNING Modu
  • Google Closure 编译器和 multipart/form-data 不起作用

    我正在向 google 闭包编译器 API 服务发出请求 content file get contents file js url http closure compiler appspot com compile post true p
  • 根据重复值对 PHP 数组进行排序

    我有一个包含重复值的数组 我想对数组进行排序 以便重复次数最多的值出现在行中的第一个 这是我的数组的示例 array 1 2 3 2 1 2 2 我想对该数组进行排序 以便它根据重复项的数量对自身进行排序 如下所示 array 2 1 3
  • 在 nginx 后面运行 jasperserver:潜在的 CSRF 攻击

    我们使用 nginx 进行 https 流量卸载 代理到在端口 8080 上运行的本地安装的 jasperserver 5 2 internet https 443 gt nginx http 8080 gt tomcat jasperse
  • Symfony2 - 在自定义验证器中调用 EmailValidator

    我正在创建一个自定义验证器约束来验证 联系人 类似于 John Doe 电子邮件受保护 gt 遵循Cookbook http symfony com doc current cookbook validation custom constr
  • PHP + MySQL 队列

    我需要一个充当队列的简单表 我的 MySQL 服务器限制是我不能使用 InnoDB 表 只能使用 MyISAM 客户 工人将同时工作 他们每次都需要接受不同的工作 我的想法是执行以下操作 伪代码 job lt SELECT FROM que
  • 安全地评估简单的数学

    我想知道是否有一种安全的方法来评估数学 例如 2 2 10000 12000 10000 20 2 2 40 20 23 12 无需使用eval 因为输入可以来自任何用户 我需要实现的只是整数的加法和减法 是否有任何已经存在的代码片段 或者
  • 什么是 PHP session_start()

    它是否基于 cookie 启动当前会话 从 PHP 网站上得到的 PHP如何控制会话 如果我在用户打开我的登录页面时启动会话 我什至可以使用该会话做什么 我可以使用当前会话来获取有关登录用户的信息吗 PHP 会话系统允许您将数据安全地存储在
  • Nginx 安全链接模块不适用于 php 文件,但适用于静态文件

    我在用http nginx org en docs http ngx http secure link module html http nginx org en docs http ngx http secure link module
  • 如何强制下载图片?

    我的页面上有一个动态生成的图像 如下所示 img src 我不想告诉我的用户右键单击图像并点击保存 而是想公开一个下载链接 单击该链接将提示下载图像 如何实现这一目标 最初我在 js 中尝试这样做 var path my image att

随机推荐

  • Ubuntu连接不上网络问题的解决方法

    这学期经常要用虚拟机做实验 但经常在某一次开机后网络连接不上 查过很多解决方法 每次奏效的方法又都不一样 这里记录一下 省的下次一个一个找了 第一次写博客 有点点小激动嘿嘿 以下方法都是在NAT模式下的连接 方法一 还原默认设置 将虚拟机关
  • 20个基本电路图讲解_记住这些规则,再看电路图就不会乱了!

    在我们进行电子DIY制作时 看图是难免的 但对于很多新手来说 刚开始似乎总有种很乱的感觉 走过来后我们才知道 当时只是没有了解这些规则 今天小编以电子电路图为主要示例进行总结一下 电路图走向 是指电路图中各部分电路 从最初的输入端到最终的输
  • 【数据结构】 二叉树面试题讲解->叁

    文章目录 引言 根据二叉树创建字符串 https leetcode cn problems construct string from binary tree submissions 题目描述 示例 示例一 示例二 思路解析 代码完整实现
  • Spring MVC的表单标签库详解

    表单标签库中包含了可以用在 JSP 页面中渲染 HTML 元素的标签 在 JSP 页面使用 Spring 表单标签库时 必须在 JSP 页面开头处声明 taglib 指令 指令代码如下 在表单标签库中有 form input passwor
  • Ueditor去掉图片之间的间隙

    问题 运营在后台配置商品信息的时候 复制京东上面的图片到ueditor富文本编辑器里面 两张图片中总是存在空白间隙 但查看html源码又很简单没有发现什么问题p标签之类的 而且硬着配置上去后 在uniapp打包的微信小程序里面查看商品详情一
  • cartographer 前端PoseExtrapolator及IMU预积分

    卡尔曼滤波器应用 用于单目标追踪的IMM模型 知乎 Cartographer前端的优化 基于IMU预积分的LIO实现 知乎 Cartographer PoseExtrapolator 位姿外推器 分析总结与优化思路 知乎 MCGA Make
  • 设计模式(五)适配器模式Adapter(结构型)

    设计模式 五 适配器模式Adapter 结构型 1 概述 接口的改变 是一个需要程序员们必须 虽然很不情愿 接受和处理的普遍问题 程序提供者们修改他们的代码 系统库被修正 各种程序语言以及相关库的发展和进化 例子1 iphone4 你即可以
  • 经典CNN模型介绍及Pytorch实现

    文章目录 前言 一 LeNet 1 LeNet介绍 2 LeNet核心代码 3 LeNet在MNIST上测试 二 AlexNet 1 AlexNet介绍 2 AlexNet核心代码 3 AlexNet在MNIST上测试 三 VGGNet 1
  • 如何在 Amazon Linux 上安装 NVM

    NVMNode Version Manager 是一个命令行实用程序 用于在基于 Linux 的系统上安装和管理多个 Node js 版本 借助 NVM 您可以在系统上安装任何特定的 Nodejs 版本并用于运行您的应用程序 本教程将帮助您
  • 使用 Prism.js 使用复制代码按钮创建代码块

    在本教程中 我们将学习如何使用 Prism js 通过复制代码按钮创建代码块 Prism js 是一个轻量级且可扩展的语法荧光笔 它使我们能够在网页上精美地格式化代码片段 添加复制代码按钮将增强用户体验 用户只需单击一下即可轻松将代码复制到
  • 在 NodeJS、ExpressJS 和 MySQL 中创建基本 CRUD API

    使用 ExpressJS 框架和 MySQL 数据库在 NodeJS 中创建基本的 CRUD 创建 读取 更新 删除 API 是一个简单的过程 在本教程中 我们将逐步介绍构建一个简单 API 所需的步骤 该 API 允许用户在数据库中创建
  • 如何避免 SSH 断管错误

    Secure Shell 或 SSH 是一种强大的协议 许多 IT 专业人员和网络管理员每天都使用它来建立与远程系统的安全连接 它旨在提供安全的远程登录和命令执行 但也存在一些问题 此类问题之一是 SSH 管道损坏错误 了解此错误的含义以及
  • Docker exec:在 Docker 容器中运行命令

    Docker 是一个流行的容器化平台 允许您在容器中打包 部署和运行应用程序 这 docker exec command 允许您在正在运行的 Docker 容器中运行命令 这对于调试 测试和管理容器非常有用 在本文中 我们将介绍如何使用 d
  • Windows 中哪个进程正在侦听端口

    如果您是系统管理员 您就会知道密切关注 Windows 系统上运行的进程有多么重要 有时 您可能需要找出哪个进程正在侦听特定端口 在本文中 我们将向您展示如何使用 CMD 和 PowerShell 来执行此操作 通过学习如何识别正在侦听端口
  • 如何安装和构建您的第一个 React Native 应用程序(快速入门)

    React 是 Facebook 维护的跨平台 JavaScript 库 它用于创建用户界面 使用 React Native 您可以轻松构建移动应用程序 React Native 提供应用程序的热重载 这样您就可以更快地构建您的应用程序 您
  • 如何在 Ubuntu 桌面上安装 NetBeans IDE 8.2 (PHP)

    NetBeans is the most popular IDE for development on Linux systems NetBeans editor provides many pre configured code temp
  • ChatGPT:AI语言模型的演变及其对社会的影响

    人工智能 AI 近年来已经取得了长足的进步 像这样的语言模型OpenAI 的 ChatGPT在自然语言处理和理解方面取得了长足的进步 本文将探讨 AI 语言模型的演变 重点关注 ChatGPT 其前身以及日益复杂的语言模型的社会影响 人工智
  • 如何在 Vim 中保存并退出

    VIM 是 Vi 改进版的缩写形式 它是一个免费的开源文本编辑器 可以安装在任何操作系统上 无论是 Windows 还是 Linux 操作系统 它可以在 CMD 命令行 模式以及 GUI 图形用户界面 模式下使用 它使用起来非常灵活和可靠
  • 如何在 Windows 上安装 Maven

    Apache Maven 是适用于任何软件项目的优秀构建工具 它可以帮助您管理项目代码及其构建过程 以便您的软件项目保持井井有条并保持其重点 Windows 并不是最受开发人员欢迎的操作系统 但企业和最终用户仍然广泛使用它 幸运的是 有多种
  • 如何在 Ubuntu 18.04 和 16.04 上使用 Nginx 安装多个 PHP 版本

    通常 网络托管管理器为每个 PHP 版本应用程序部署使用单独的服务器 这增加了托管成本 或者 您可以运行多个Docker多个 PHP 版本的容器 本教程帮助您在具有不同 PHP 版本的 Nginx Web 服务器上安装和配置两个 Virtu