生命就像是一场告别
从起点对一切说再见
你拥有的仅仅是伤痕
在回望来路的时候
那天我们相遇在街上
彼此寒暄并报以微笑
我们相互拥抱挥手道别
转过身后已泪流满面
🎵 蔡健雅《当我想你的时候》
Nginx是一款高性能的Web服务器和反向代理服务器,广泛用于提供静态内容服务、负载均衡以及作为HTTP缓存。在许多情况下,我们需要通过Nginx来同时管理主域名和二级域名的流量。例如,主域名(如www.example.com)用于提供公司的主要网站内容,而二级域名(如api.example.com)用于提供API服务。本文将通过一个示例配置,展示如何使用Nginx来配置主域名和二级域名,并解释配置中的关键部分。
Nginx配置代码示例
以下是一个Nginx配置示例,其中包括了两个不同的server块,分别用于主域名www.lpv.cc和二级域名spider.lpv.cc的配置:
bash
# 配置主域名 www.lpv.cc 的HTTPS服务
server {
listen 443 ssl;
server_name www.ss33.com; # 指定域名
ssl_certificate cert/ss33.com.pem; # SSL证书文件路径
ssl_certificate_key cert/ss33.com.key; # SSL证书私钥文件路径
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
location / {
root /var/www/movie/admin; # 静态文件的根目录
index index.html index.htm; # 默认的索引文件
}
}
# HTTP到HTTPS的重定向
server {
listen 80;
server_name www.ss33.cc;
return 301 https://$host$request_uri; # 301重定向到HTTPS
}
# 配置二级域名 spider.lpv.cc 的HTTPS服务
server {
listen 443 ssl;
server_name spider.ss33.cc; # 指定二级域名
ssl_certificate cert/spider.ss33.cc.pem; # SSL证书文件路径
ssl_certificate_key cert/spider.ss33.cc.key; # SSL证书私钥文件路径
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://127.0.0.1:2331; # 将请求代理到本地的2331端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
# HTTP到HTTPS的重定向
server {
listen 80;
server_name spider.ss33.cc;
return 301 https://$host$request_uri; # 301重定向到HTTPS
}
配置解释
HTTPS配置
对于主域名和二级域名,我们通过配置listen 443 ssl
;来监听443端口,并启用SSL。server_name
指令指定了该配置适用的域名。
ssl_certificate和ssl_certificate_key
指令指定了SSL证书和私钥的路径。这些证书用于启用HTTPS,确保数据传输的安全性。
ssl_session_cache
和ssl_session_timeout
优化了SSL/TLS会话的性能和时长。
ssl_ciphers
和ssl_protocols
指定了支持的加密套件和TLS协议版本,以确保使用最佳的安全实践。
ssl_prefer_server_ciphers on;
确保服务器优先选择它支持的加密算法,这有助于提高安全性。
静态内容和反向代理配置
对于www.ss33.com
主域名,我们通过location /
块指定了静态内容的根目录root /var/www/movie/admin
;,并设置了默认的索引文件为index.html
和index.htm
。这意味着当用户访问www.ss33.com
时,Nginx将会提供/var/www/movie/admin
目录下的静态内容。
对于spider.ss33.com
二级域名,我们通过location /
块中的proxy_pass http://127.0.0.1:2331;
将所有请求代理到了本地的2331
端口。此配置通常用于当Nginx背后有一个Web应用或API服务运行在该端口时。通过proxy_set_header
指令,我们确保了原始请求的一些关键头部信息(如Host、真实IP、转发信息等)被正确地传递给后端服务。
HTTP到HTTPS的重定向
我们为每个域名配置了一个额外的server
块,用于监听80端口(HTTP),并通过return 301 https://$host$request_uri;
实现了自动重定向到对应的HTTPS地址。这样做的目的是确保所有的流量都通过安全的HTTPS连接,提高网站的安全性和可靠性。
配置的关键点
-
证书路径:确保SSL证书和私钥的路径正确,并且文件权限允许Nginx访问。
-
域名配置:server_name指令需正确设置为你的主域名和二级域名。
-
静态内容与代理服务:根据你的实际需求选择提供静态内容还是通过Nginx代理到后端服务。对于静态内容,设置正确的root路径;对于代理服务,配置正确的proxy_pass目标地址及相关头部信息。
-
安全性配置:使用现代的加密算法和协议(如TLS 1.2和TLS 1.3),禁用已知不安全的算法。
-
HTTP到HTTPS重定向:对于所有通过HTTP访问的请求,确保它们被重定向到HTTPS,以利用SSL/TLS提供的加密和安全性。
结语
通过这份Nginx配置,你可以为你的主域名和二级域名提供安全、高效的Web服务,并根据需要轻松地提供静态内容或将请求代理到后端应用。记得在应用新配置后重载或重启Nginx服务,以使更改生效。