CentOS LNMP配置虚拟主机步骤
在配置虚拟主机前,需确保已安装Nginx、MySQL/MariaDB、PHP及PHP-FPM。若未安装,可通过以下命令快速部署(以CentOS 7/8为例):
# 安装EPEL仓库(可选,用于扩展软件包)
sudo yum install epel-release -y
# 安装Nginx
sudo yum install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx
# 安装MariaDB(或MySQL)
sudo yum install mariadb-server mariadb -y
sudo systemctl start mariadb
sudo systemctl enable mariadb
sudo mysql_secure_installation # 运行安全脚本,设置root密码
# 安装PHP及常用扩展
sudo yum install php php-fpm php-mysqlnd php-gd php-xml -y
sudo systemctl start php-fpm
sudo systemctl enable php-fpm
LNMP一键安装包(若使用)会默认将虚拟主机配置存放在/usr/local/nginx/conf/vhost/目录下;手动安装则通常在/etc/nginx/conf.d/目录下创建配置文件。
以example.com为例,执行以下命令创建配置文件:
sudo vi /etc/nginx/conf.d/example.com.conf
写入以下内容(按需修改域名、目录):
server {
listen 80;
server_name example.com www.example.com; # 替换为你的域名
root /var/www/example.com/html; # 网站根目录(需提前创建)
index index.php index.html index.htm;
# 前端路由处理
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# PHP处理
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php-fpm/www.sock; # PHP-FPM监听socket(默认路径)
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
# 禁止访问.htaccess文件
location ~ /\.ht {
deny all;
}
}
# 创建网站根目录
sudo mkdir -p /var/www/example.com/html
# 设置目录所有者(Nginx默认用户为nginx,若使用其他用户需调整)
sudo chown -R nginx:nginx /var/www/example.com
# 设置目录权限
sudo chmod -R 755 /var/www/example.com
# 创建测试页面
echo "<?php phpinfo(); ?>" | sudo tee /var/www/example.com/html/index.php
# 测试配置文件语法
sudo nginx -t
# 若输出“syntax is ok”则表示配置正确
# 重载Nginx使配置生效
sudo systemctl reload nginx
将域名example.com和www.example.com的A记录指向服务器IP(需在域名注册商或DNS管理平台操作)。
测试访问:在浏览器输入http://example.com,应显示PHP信息页面。
使用Let’s Encrypt免费证书,执行以下命令:
# 安装Certbot工具
sudo yum install certbot python2-certbot-nginx -y
# 获取并安装证书
sudo certbot --nginx -d example.com -d www.example.com
# 按提示完成验证,证书会自动配置到Nginx中
# 设置证书自动续期(Let's Encrypt有效期90天)
sudo systemctl enable certbot.timer
./vhost.sh脚本快速添加虚拟主机(按提示输入域名、目录等信息)。listen参数与Nginx配置中的fastcgi_pass一致(默认均为/run/php-fpm/www.sock)。sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload