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