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
相关推荐
夏日听雨眠8 小时前
LInux(逻辑地址与物理地址的区别,文件描述符,lseek函数)
linux·运维·网络
哲霖软件9 小时前
ERP 赋能非标自动化行业:破解物料与库存管理难题
运维·自动化
ydyd202604219 小时前
制造业数字化干货:设备巡检、报修、保养一体化管理流程拆解
网络
火车叼位10 小时前
替代 Tiny Win10 的 Linux 方案:Debian XFCE 精简桌面搭建
linux·运维
Hali_Botebie10 小时前
【图卷积网络】GCN是AXΘ 和CNN是AX
网络·人工智能·cnn
IpdataCloud10 小时前
高并发场景下IP数据接口怎么选?从QPS到离线库的完整选型指南
网络·网络协议·tcp/ip
CableTech_SQH10 小时前
企业园区网络突然中断排查时间影响生产?综合布线运维管理解决方案分析
网络
難釋懷10 小时前
Redis网络模型-IO多路复用模型-poll模式
网络·数据库·redis
treesforest11 小时前
IP精准定位服务:从城市轮廓到街道坐标,技术如何重塑空间感知
网络·数据库·网络协议·tcp/ip·ip
平行侠11 小时前
A15 工业路由器IP前缀高速检索与内存压缩系统
网络·tcp/ip·算法