CentOS 7 下 Nginx 虚拟主机配置详解
在 CentOS 7 操作系统中,通过 Nginx 实现虚拟主机的配置,可以有效地在同一台服务器上运行多个网站,并且各个网站之间互不干扰,本文将详细介绍如何在 CentOS 7 上通过 Nginx 配置虚拟主机,包括基于 IP、端口和域名的虚拟主机配置。
一、环境准备
1、安装 Nginx
确保你的系统已经安装了 Nginx,如果还没有安装,可以使用以下命令进行安装:
yum install -y epel-release yum install -y nginx
2、创建站点根目录
为了方便管理,我们需要为每个虚拟主机创建单独的站点根目录:
mkdir -p /var/wwwroot/site1 mkdir -p /var/wwwroot/site2 echo "<h1>Welcome to Site 1</h1>" > /var/wwwroot/site1/index.html echo "<h1>Welcome to Site 2</h1>" > /var/wwwroot/site2/index.html
3、关闭防火墙和 SELinux
为了防止防火墙和 SELinux 影响我们的配置,需要暂时关闭它们:
systemctl stop firewalld systemctl disable firewalld setenforce 0
二、配置基于 IP 的虚拟主机
假设我们已经有两个 IP 地址192.168.71.103
和192.168.71.104
,可以通过以下步骤配置基于 IP 的虚拟主机。
1、配置网络接口
编辑/etc/sysconfig/network-scripts/ifcfg-eth0
文件,添加以下内容以增加第二个 IP 地址:
DEVICE=eth0:1 IPADDR=192.168.71.104 NETMASK=255.255.255.0 ONBOOT=yes
2、配置 Nginx
编辑 Nginx 配置文件/etc/nginx/conf.d/vhosts.conf
,添加以下内容:
server { listen 192.168.71.103:80; server_name site1.test.com; root /var/wwwroot/site1; index index.html; } server { listen 192.168.71.104:80; server_name site2.test.com; root /var/wwwroot/site2; index index.html; }
3、重启 Nginx
保存配置文件后,重启 Nginx 服务:
systemctl restart nginx
访问http://192.168.71.103
和http://192.168.71.104
应该分别看到不同的网站内容。
三、配置基于端口的虚拟主机
基于端口的虚拟主机配置相对简单,只需修改监听端口即可。
1、编辑 Nginx 配置文件
编辑/etc/nginx/conf.d/vhosts.conf
,添加以下内容:
server { listen 8081; server_name site1.test.com; root /var/wwwroot/site1; index index.html; } server { listen 8082; server_name site2.test.com; root /var/wwwroot/site2; index index.html; }
2、重启 Nginx
保存配置文件后,重启 Nginx 服务:
systemctl restart nginx
访问http://your_server_ip:8081
和http://your_server_ip:8082
应该分别看到不同的网站内容。
四、配置基于域名的虚拟主机
基于域名的虚拟主机配置是最常见的方式,适用于大多数生产环境。
1、修改本地 hosts 文件
在 Windows 系统的C:\Windows\System32\drivers\etc\hosts
文件中添加以下内容:
192.168.71.103 site1.test.com 192.168.71.104 site2.test.com
2、编辑 Nginx 配置文件
编辑/etc/nginx/conf.d/vhosts.conf
,添加以下内容:
server { listen 80; server_name site1.test.com; root /var/wwwroot/site1; index index.html; } server { listen 80; server_name site2.test.com; root /var/wwwroot/site2; index index.html; }
3、重启 Nginx
保存配置文件后,重启 Nginx 服务:
systemctl restart nginx
访问http://site1.test.com
和http://site2.test.com
应该分别看到不同的网站内容。
五、高级配置与优化
1.负载均衡
Nginx 还支持负载均衡功能,可以将请求分发到多台后端服务器。
upstream backend { server backend1.example.com; server backend2.example.com; } server { listen 80; server_name example.com; location / { proxy_pass http://backend; } }
2.SSL 配置
为了提高网站的安全性,可以为虚拟主机配置 SSL 证书:
server { listen 443 ssl; server_name site1.test.com; ssl_certificate /path/to/fullchain.pem; ssl_certificate_key /path/to/privkey.pem; root /var/wwwroot/site1; index index.html; }
使用 Let’s Encrypt 等工具可以免费获取 SSL 证书。
3.缓存与压缩
启用 GZIP 压缩和浏览器缓存可以提高网站的加载速度:
http { gzip on; gzip_types text/plain application/xml text/css application/javascript; expires 30d; }
六、常见问题解答(FAQs)
Q1:如何更改默认的虚拟主机?
A1:在 Nginx 配置文件中,默认的虚拟主机是第一个匹配的server
块,如果希望设置特定的虚拟主机为默认主机,可以在listen
指令中添加default_server
参数:
server { listen 80 default_server; server_name _; return 404; }
这段配置表示,如果没有其他server_name
匹配,将会返回 404 Not Found。
Q2:如何防止 Nginx 配置文件出错?
A2:每次修改完 Nginx 配置文件后,建议使用以下命令检查配置文件的正确性:
nginx -t
如果配置文件有误,该命令会提示具体的错误信息,确认无误后,再重启 Nginx 服务:
systemctl restart nginx
可以在 Nginx 配置文件顶部添加以下配置,使 Nginx 自动检测配置文件的变化并热加载:
events { worker_connections 1024; } http { # other configurations... }
然后在终端执行:
killall -HUP $(cat /var/run/nginx.pid)
这样,Nginx 就会重新加载配置文件而不会中断当前的连接。
小编有话说 通过以上步骤,你可以在 CentOS 7 上轻松配置 Nginx 虚拟主机,无论是基于 IP、端口还是域名,掌握这些技能后,你可以根据实际需求灵活地管理和扩展你的网站,如果在配置过程中遇到任何问题,欢迎随时提问!希望这篇文章对你有所帮助,祝你在运维的道路上越走越远!