用Apache/Nginx Web服务器在Linux上托管PHP应用程序
在以下的指南中,我们将学习如何使用Apache/Nginx Web服务器在Linux上托管PHP应用程序,适用在Debian/Ubuntu/Rhel/Rocky/Alma Linux/CentOS系统上。
具体的操作步骤
1、在Linux系统上安装PHP的说明
第一步是确保PHP安装在您的Linux系统上,可以参考如何在Ubuntu 22.04/20.04系统上安装PHP 8.2版本一文,阅读地址在https://www.hmxthome.com/linux/4986.html。
一旦安装了所需的PHP版本,就可以使用以下命令进行验证:
$ php -v
PHP 8.2.1 (cli) (built: Jan 3 2023 18:40:55) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.2.1, Copyright (c) Zend Technologies
2、创建PHP应用程序
一旦安装了PHP,您就可以选择任何所需的web服务器来托管您的应用程序。但首先,您需要创建一个PHP应用程序。
对于本指南,我们将在/var/www/html目录中创建应用程序:
sudo mkdir -p /var/www/html/php
现在,它将作为我们的PHP应用程序的目录。设置路径所需的权限:
sudo chmod -R 775 /var/www/html/php
现在导航到此目录并创建一个示例index.php文件,如下所示:
cd /var/www/html/php
sudo vim index.php
在该文件中,我们将为一个简单的HelloWorld应用程序添加PHP脚本:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>PHP - Hello, World!</title>
</head>
<body>
<h1><?php echo 'Hello, World! PHP is Amazing!'; ?></h1>
</body>
</html>
注:在以上这段代码中,看起来像一个普通的HTML文档,唯一的区别是带有“?PHP”,标记之间的代码是我们希望由PHP执行的代码。
如果尝试执行此代码,我们将看到HTML代码,因为终端不知道如何将HTML呈现到web上:
$ php index.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>PHP - Hello, World!</title>
</head>
<body>
<h1>Hello, World! PHP is Amazing!</h1>
</body>
</html>
3、使用Apache/Nginx Web服务器托管PHP应用程序
为了能够在网络上查看应用程序,您需要一个网络服务器。在本指南中,我将演示如何使用Nginx和Apache托管应用程序。
选项1:使用Apache在Linux上托管PHP应用程序
要使用Apache托管PHP应用程序,需要安装web服务器和所有必需的模块。这可以通过命令来完成:
##Debian/Ubuntu
sudo apt install libapache2-mod-php8.2
##Rhel/Rocky/Alma Linux/CentOS
sudo yum install httpd
安装后,您可以为您的应用程序进行所需的配置:
##Debian/Ubuntu
sudo vim /etc/php/8.2/apache2/php.ini
##Rhel/Rocky/Alma Linux/CentOS
sudo vim /etc/php.ini
将所需配置添加到文件中:
max_execution_time = 300
upload_max_filesize = 100M
post_max_size = 128M
date.timezone = Asia/Shanghai
在基于Rhel的系统上,您需要编辑下面的文件才能加载PHP文件:
$ sudo vim /etc/httpd/conf/httpd.conf
# LoadModule foo_module modules/mod_foo.so
AddHandler php-script .php
保存文件并重新启动服务:
##Debian/Ubuntu
sudo systemctl restart apache2
##Rhel/Rocky/Alma Linux/CentOS
sudo systemctl restart php-fpm httpd
现在我们将为应用程序创建一个virtual host文件:
##Debian/Ubuntu
sudo vim /etc/apache2/sites-available/test.conf
##Rhel/Rocky/Alma Linux/CentOS
sudo vim /etc/httpd/conf.d/test.conf
将以下行添加到文件中:
<Directory /var/www/html/php>
Require all granted
</Directory>
<VirtualHost *:80>
ServerName test.computingforgeeks.com
ServerAlias www.test.computingforgeeks.com
ServerAdmin admin@localhost
DocumentRoot /var/www/html/php
</VirtualHost>
对于基于Debian的版本,激活站点的方法如下:
sudo ln -s /etc/apache2/sites-available/test.conf /etc/apache2/sites-enabled/
sudo unlink /etc/apache2/sites-enabled/000-default.conf
重新启动服务:
##Debian/Ubuntu
sudo systemctl restart apache2
##Rhel/Rocky/Alma Linux/CentOS
sudo systemctl restart php-fpm httpd
允许端口通过防火墙:
#For UFW
sudo ufw allow 80
##For Firewalld
sudo firewall-cmd --add-port=80/tcp --permanent
sudo firewall-cmd --reload
配置到这里,可以使用URL地址格式为http://IP_Address来访问网站了:
选项2:使用Nginx在Linux上托管PHP应用程序
除了使用Apache在Linux上托管PHP应用程序外,也可以使用Nginx托管应用程序。首先,在您的系统上安装web服务器。
##Debian/Ubuntu
sudo apt install nginx php8.2-fpm
##Rhel/Rocky/Alma Linux/CentOS
sudo yum install nginx php-fpm
一旦Nginx和PHP-FPM模块安装完成后,您就可以进行所需的PHP配置:
##Debian/Ubuntu
sudo vim /etc/php/8.2/fpm/php.ini
##Rhel/Rocky/Alma Linux/CentOS
sudo vim /etc/php.ini
在文件中,添加行:
upload_max_filesize = 20M
short_open_tag = On
memory_limit = 256M
max_execution_time = 360
date.timezone = Asia/Shanghai
保存文件并重新启动服务:
sudo systemctl restart nginx php*-fpm.service
现在我们将为Nginx创建一个virtual host文件:
##Debian/Ubuntu
sudo vim /etc/nginx/sites-available/test.conf
##Rhel/Rocky/Alma Linux/CentOS
sudo vim /etc/nginx/conf.d/test.conf
将下面的行添加到文件中:
server {
listen 80;
server_name test.computingforgeeks.com;
root /var/www/html/php;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
fastcgi_pass unix:/run/php-fpm.www.sock;
}
}
在基于Debian的平台上,将/run/php-fpm.www.sock替换为/run/php/php8.2-fpm.sock。保存文件,然后启用站点:
sudo ln -s /etc/nginx/sites-available/test.conf /etc/nginx/sites-enabled/
sudo unlink /etc/nginx/sites-enabled/default
重新启动服务:
sudo systemctl restart nginx php*-fpm.service
允许HTTP,通过防火墙并使用URL地址格式为http://IP_Address的访问应用程序:
结论
到这里,标志着本指南的结束,该指南介绍了如何使用Apache/Nginx Web服务器在Linux上托管PHP应用程序,希望对有需求的用户提供帮助。