Nginx中配置SSL证书

目录结构


sslTest
├── Dockerfile
├── docker-compose.yml
├── nginx
│   ├── conf
│   │   └── www_a5k3mo16_icu.conf
│   └── html
│       └── index.html
└── nodedemo
    └── app.js

生成node服务器镜像

Dockerfile

FROM node

RUN mkdir -p /root/nodedemo

COPY ./nodedemo /root/nodedemo

WORKDIR /root/nodedemo

CMD ["node", "app.js"]

docker-compose.yml

version: '3'
services:
  mynodejs:
    restart: always
    deploy:
      replicas: 3
    build:
      context: ./
      dockerfile: Dockerfile
  mynginx:
    image: nginx
    restart: always
    ports:
      - 443:443
    volumes:
      - ./nginx/conf/:/etc/nginx/conf.d/
      - ./nginx/html/:/usr/share/nginx/html/
    deploy:
      replicas: 3
      resources:        
        limits:
          cpus: "0.5"
          memory: 500M
      restart_policy:
        condition: on-failure

nginx/conf/www_a5k3mo16_icu.conf

# 负载均衡
upstream whj {
  ip_hash;
  server mynodejs:8787 weight=1;
}

server {
  listen 443 ssl;
  server_name www.a5k3mo16.icu;

  # SSL 配置
  ssl_certificate /etc/nginx/conf.d/a5k3mo16.icu_1735989737/a5k3mo16.icu.crt;
  ssl_certificate_key /etc/nginx/conf.d/a5k3mo16.icu_1735989737/a5k3mo16.icu.key;
  ssl_session_timeout 5m;
  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE';
  ssl_prefer_server_ciphers on;

  # 静态文件服务(如果需要提供静态文件)
  location /html/ {
    root /usr/share/nginx;
    index index.html index.htm;
  }

  # 负载均衡代理到 Node.js 服务
  location / {
    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_buffering off;
    proxy_pass http://whj;  # 代理到 Node.js 服务
  }
}

nodedemo/app.js

const http = require('http');

// 创建服务器
const server = http.createServer((req, res) => {
  if (req.method === 'GET' && req.url === '/') {
    res.end('WELCOME HERE!');
  }
  if (req.method === 'GET' && req.url === '/user') {
    // 设置响应头
    res.writeHead(200, { 'Content-Type': 'text/html' });
    // 返回 JSON 数据
    res.end("<h1 style='color:red'>Hi</h1>");
  } else {
    // 处理其他路径
    res.writeHead(404, { 'Content-Type': 'text/plain' });
    res.end('Not Found');
  }
});

// 监听端口 8787
const PORT = 8787;
server.listen(PORT, () => {
  console.log(`Server is running on :${PORT}`);
});

### 配置 SSL 证书以启用 HTTPS 在 Nginx配置 SSL 证书以启用 HTTPS 是一个常见的需求,尤其是在需要保证网站数据传输安全的场景下。以下是详细的配置步骤和相关说明。 #### 1. 获取 SSL 证书 在开始配置之前,需要获取 SSL 证书SSL 证书通常由证书颁发机构(CA)签发,可以通过以下方式获取: - 从商业证书颁发机构(如 Let's Encrypt、DigiCert 等)申请。 - 生成自签名证书(仅适用于测试环境)。 获取到的证书通常包括两个文件:证书文件(`.crt`)和私钥文件(`.key`)。例如,`1_www.imoocdsp.com_bundle.crt` 和 `2_www.imoocdsp.com.key` [^2]。 #### 2. 配置 Nginx 以启用 HTTPS 将 SSL 证书文件和私钥文件放置在 Nginx配置目录中,通常为 `/etc/nginx/ssl/` 或 `/usr/local/nginx/conf/ssl/`。接下来,修改 Nginx配置文件(通常是 `/etc/nginx/nginx.conf` 或 `/usr/local/nginx/conf/nginx.conf`),添加或修改 `server` 块以启用 HTTPS。 以下是一个基本的 HTTPS 配置示例: ```nginx server { listen 443 ssl; server_name example.com; # 启用 SSL ssl on; # 指定 SSL 证书和私钥路径 ssl_certificate /etc/nginx/ssl/1_www.imoocdsp.com_bundle.crt; ssl_certificate_key /etc/nginx/ssl/2_www.imoocdsp.com.key; # 配置 SSL 会话缓存和超时时间 ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; # 配置加密协议和套件 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; location / { proxy_pass http://tomcats/; index index.html index.htm; } } ``` #### 3. 强制 HTTP 重定向到 HTTPS 为了确保所有请求都通过 HTTPS 进行,可以配置 Nginx 将 HTTP 请求重定向到 HTTPS。这可以通过添加另一个 `server` 块来实现,该块监听 80 端口并返回 301 重定向响应。 ```nginx server { listen 80; server_name example.com; # 强制重定向到 HTTPS return 301 https://$host$request_uri; } ``` #### 4. 验证配置并重启 Nginx 在完成配置后,需要验证 Nginx 配置是否正确。可以通过以下命令检查配置文件语法: ```bash nginx -t ``` 如果配置文件语法正确,可以使用以下命令重启 Nginx 以应用更改: ```bash systemctl restart nginx ``` #### 5. 配置 Docker 部署的 Nginx 如果使用 Docker 部署 Nginx,则需要在 Docker 容器中挂载 SSL 证书文件,并在 Nginx 配置中引用这些文件。例如,在 Docker Compose 文件中,可以这样配置: ```yaml version: '3' services: nginx: image: nginx:latest volumes: - ./nginx.conf:/etc/nginx/nginx.conf - ./ssl:/etc/nginx/ssl ports: - "80:80" - "443:443" ``` 确保 Nginx 配置文件中的 SSL 证书路径与挂载的卷路径一致。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值