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
相关推荐
黄焖鸡能干四碗2 小时前
企业数据架构、应用架构、技术架构设计方案(PPT文件)
大数据·运维·数据库·安全·架构·需求分析
钝挫力PROGRAMER2 小时前
Linux systemd服务获取不到用户环境变量
linux·运维·python
志栋智能2 小时前
故障发现滞后、处置不及时引发的业务中断与数据风险,超自动化巡检帮您解决
运维·自动化
Magic--2 小时前
Linux exec进程替换详解
linux·运维·服务器
道阻且长行则将至!2 小时前
Linux 轻量级桌面环境
linux·运维·服务器·桌面管理器·ubuntu轻量级桌面
qqty12172 小时前
Nginx反向代理出现502 Bad Gateway问题的解决方案
运维·nginx·gateway
做萤石二次开发的哈哈2 小时前
萤石开放平台×OpenClaw: 玩手机检测及实时告警技能包发布
网络·人工智能·ai·智能体
YMWM_2 小时前
服务器上的cursor同步本地插件
运维·服务器·chrome
Trouvaille ~2 小时前
【项目篇】从零手写高并发服务器(十):性能测试与项目总结
linux·运维·c++·reactor·性能测试·高并发服务器·webbench