Nginx的虚拟主机(Server Block)允许在单个服务器上托管多个网站或应用,主要通过以下两种方式实现: - 基于名称的虚拟主机:通过不同的域名区分 - 基于IP的虚拟主机:通过不同的IP地址区分
现代Web服务主要使用基于名称的虚拟主机,因为它更节省IP资源。
Nginx虚拟主机的核心配置位于server
块中,通常放置在/etc/nginx/conf.d/
目录或主配置文件nginx.conf
的http
块内。
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
listen
指令定义服务器监听的IP和端口nginx
listen 80; # 监听所有IP的80端口
listen 127.0.0.1:8080; # 监听特定IP和端口
listen [::]:80; # 监听IPv6的80端口
nginx
server_name example.com *.example.com; # 通配符
server_name ~^(www\.)?(?<domain>.+)$; # 正则表达式
root
指定网站文件的根目录index
定义默认访问的文件nginx
root /var/www/example.com/public;
index index.php index.html index.htm;
server {
listen 80;
server_name example.com www.example.com api.example.com;
# 共用配置...
}
# 或分开配置不同域名
server {
listen 80;
server_name example.com;
# 特定配置...
}
server {
listen 80;
server_name api.example.com;
# API特定配置...
}
server {
listen 80 default_server;
server_name _;
return 444; # 关闭连接
}
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
# 安全增强配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;
}
dig
或nslookup
验证DNS解析
bash
dig example.com
nslookup example.com
域名无法访问
错误匹配到默认服务器
SSL证书问题
# 检查Nginx配置语法
nginx -t
# 重新加载配置
nginx -s reload
# 查看Nginx进程和监听端口
ps aux | grep nginx
netstat -tulnp | grep nginx
# 实时查看访问日志
tail -f /var/log/nginx/access.log
nginx
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
}
nginx
gzip on;
gzip_types text/plain text/css application/json application/javascript;
nginx
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
通过深入理解这些配置细节和实现原理,您可以构建高效、安全的Nginx虚拟主机环境,满足各种Web服务需求。