本文主要讲解在Nginx配置多个域名,多证书,多服务,核心是nginx配置文件。
1. 情景介绍
- 现在有一个项目,有测试环境和正式环境,已经为两个环境各自申请到域名和ssl证书
- 正式环境
- 域名:
xxx.com
和www.xxx.com
- 证书:
xxx.com_bundle.pem
和xxx.com.key
- 域名:
- 测试环境
- 域名:
test-xxx.com
和www.test-xxx.com
- 证书:
test-xxx.com_bundle.pem
和test-xxx.com.key
- 域名:
- 目前想要通过Nginx他们配置到同一台服务器上,要求如下
- 实现http重定向到https
- 添加域名和证书
- 目前已经在服务器上将nginx安装到
/usr/local/nginx
,并且已经为nginx创建了系统命令 /usr/local/nginx
目录主要内容如下- conf - nginx.conf - sbin - nginx
- nginx已经编译了ssl相关依赖
2. 解决方案
- Ⅰ. 将证书文件上传至服务器
- 在
/usr/local/nginx
下创建ssl目录,用于存放证书cd /usr/local/nginx mkdir ssl
- 将证书相关文件全部上传至
ssl
目录下cd ssl rz
- 最后结果如下,证书文件既可以是.crt也可以是.pem,两者都有效
nginx - ssl - xxx.com_bundle.pem - xxx.com.key - test-xxx.com_bundle.pem - test-xxx.com.key
- 在
- Ⅱ. 修改
/usr/local/nginx/conf/nginx.conf
,内容如下- 正式环境的配置文件
# Nginx的主配置文件 user nginx; # 运行Nginx的用户名,可能需要根据你的系统进行调整 worker_processes auto; # 工作进程的数量,auto会根据CPU核心数自动设置 error_log /var/log/nginx/error.log; # 错误日志的位置 pid /run/nginx.pid; # Nginx主进程的PID文件位置 # 全局块中可以包含的事件处理指令 events { worker_connections 1024; # 每个工作进程可以打开的最大连接数 } # http块,包含了所有HTTP相关的配置 http { include mime.types; # 包含媒体类型映射文件 default_type application/octet-stream; # 默认媒体类型 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; # 访问日志的位置和格式 sendfile on; # 启用sendfile系统调用来传输文件 #tcp_nopush on; keepalive_timeout 65; # 长连接超时时间 # gzip配置 #gzip on; # 引入其他配置文件 include /etc/nginx/conf/*.conf; # 虚拟主机配置,可以包含多个server块 server { listen 80; # 监听HTTP的80端口 server_name xxx.com www.xxx.com; # 你的域名 # 将所有HTTP请求重定向到HTTPS return 301 https://$server_name$request_uri; } # 正式环境 server { listen 443 ssl; # 监听443端口 server_name xxx.com www.xxx.com; # 服务器名,可以是域名或IP地址 # SSL证书和密钥配置 ssl_certificate /usr/local/nginx/ssl/xxx.com_bundle.pem; ssl_certificate_key /path/to/your/xxx.com.key; # SSL调优 ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { root /usr/ui/html; # 自己正式网站根目录 index index.html index.htm; # 默认页面 } # 错误页面配置 #error_page 404 /404.html; # redirect server error pages to the static page /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # 禁止访问.htaccess文件 location ~ /\.ht { deny all; } } }
- 正式环境的配置文件
- Ⅲ. 在
/usr/local/nginx/conf/
目录下创建nginx.test.conf
- 创建
nginx.test.conf
touch nginx.test.conf
- 然后加入以下内容
# 测试环境 server { listen 80; # 监听HTTP的80端口 server_name xxx.com www.xxx.com; # 你的域名 # 将所有HTTP请求重定向到HTTPS return 301 https://$server_name$request_uri; } server { listen 443 ssl; # 监听443端口 server_name test-xxx.com www.test-xxx.com; # 服务器名,可以是域名或IP地址 # SSL证书和密钥配置 ssl_certificate /usr/local/nginx/ssl/test-xxx.com_bundle.pem; ssl_certificate_key /path/to/your/test-xxx.com.key; # SSL调优 ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { root /usr/test-ui/html; # 测试环境网站根目录 index index.html index.htm; # 默认页面 } # 错误页面配置 #error_page 404 /404.html; # redirect server error pages to the static page /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # 禁止访问.htaccess文件 location ~ /\.ht { deny all; } }
- 创建
- Ⅳ. 至此配置完成,接下来启动即可
- 停止
nginx -s stop
- 启动
nginx
- 停止