Nginx多域名,多证书,多服务配置,实用版

本文主要讲解在Nginx配置多个域名,多证书,多服务,核心是nginx配置文件。

1. 情景介绍
  • 现在有一个项目,有测试环境和正式环境,已经为两个环境各自申请到域名和ssl证书

  • 正式环境

    • 域名:xxx.comwww.xxx.com
    • 证书:xxx.com_bundle.pemxxx.com.key
  • 测试环境

    • 域名:test-xxx.comwww.test-xxx.com
    • 证书:test-xxx.com_bundle.pemtest-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
相关推荐
编程牛马姐6 小时前
独立站SEO流量增长:提高Google排名的优化方法
前端·javascript·网络
ITOWARE_SAPer6 小时前
选择SAP实施公司能否兼得官方授权与高性价比?
运维·能源·制造·零售
Elastic 中国社区官方博客6 小时前
Elasticsearch:快速近似 ES|QL - 第一部分
大数据·运维·数据库·elasticsearch·搜索引擎·全文检索
2401_873479406 小时前
如何从零搭建私有化IP查询平台?数据采集、清洗、建库到API发布全流程
服务器·网络·tcp/ip
AC赳赳老秦7 小时前
OpenClaw生成博客封面图+标题,适配CSDN视觉搜索,提升点击量
运维·人工智能·python·自动化·php·deepseek·openclaw
Eric.Lee20217 小时前
docker 启动停止命令
运维·docker·容器
FS_Marking8 小时前
CWDM vs DWDM:区别是什么?
网络
samson_www8 小时前
EC2的GRUB引导程序问题
运维·ai
Vis-Lin8 小时前
BLE 协议栈:ATT 协议详解
网络·物联网·网络协议·iot·ble
代码中介商8 小时前
Linux 帮助手册与用户管理完全指南
linux·运维·服务器