通用的 Nginx 配置,通过 反向代理 将不同的域名指向本机的不同服务。所有的虚拟主机都会监听 80 端口,但通过不同的 server_name 来访问不同的服务。

配置示例

假设你有多个服务运行在本机的不同端口上(例如 8080, 8081, 8082 等),并且你希望通过不同的域名来访问这些服务。

配置结构:

  • service1.com 访问本机的服务(比如:端口 8080)。
  • service2.com 访问本机的服务(比如:端口 8081)。
  • service3.com 访问本机的服务(比如:端口 8082)。

Nginx 配置文件

server {
    listen 80;
    server_name service1.com www.service1.com;

    location / {
        proxy_pass http://127.0.0.1:8080;  # 转发到本机的 8080 端口
        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_set_header X-Forwarded-Proto $scheme;
    }
}

server {
    listen 80;
    server_name service2.com www.service2.com;

    location / {
        proxy_pass http://127.0.0.1:8081;  # 转发到本机的 8081 端口
        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_set_header X-Forwarded-Proto $scheme;
    }
}

server {
    listen 80;
    server_name service3.com www.service3.com;

    location / {
        proxy_pass http://127.0.0.1:8082;  # 转发到本机的 8082 端口
        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_set_header X-Forwarded-Proto $scheme;
    }
}

配置说明:

  • server_name:每个 server 块都有不同的 server_name,这会让 Nginx 根据请求的域名来决定应该使用哪个配置块来处理请求。
  • proxy_pass:将请求反向代理到本机的不同端口(如 8080、8081、8082 等)。这里假设你有三个服务分别运行在这些端口。
  • proxy_set_header:这些指令确保 Nginx 正确地传递一些头信息,保留客户端的原始请求信息,包括:
    • X-Real-IP:客户端的真实 IP 地址。
    • X-Forwarded-For:通过代理传递的 IP 地址链。
    • X-Forwarded-Proto:用于知道请求使用的协议(HTTP 或 HTTPS)。
    • Host:客户端请求的域名。

访问方式

  • 当用户访问 http://service1.com 时,Nginx 会将请求反向代理到本机的 http://127.0.0.1:8080
  • 当用户访问 http://service2.com 时,Nginx 会将请求反向代理到本机的 http://127.0.0.1:8081
  • 当用户访问 http://service3.com 时,Nginx 会将请求反向代理到本机的 http://127.0.0.1:8082

注意事项

  1. DNS 配置:确保你在 DNS 上正确配置了 service1.com, service2.com, service3.com 等域名,使其指向你的服务器 IP。
  2. 服务端口:确保目标服务(例如,8080、8081、8082 等)已经在本地正确启动,并且能响应请求。
  3. 防火墙设置:确保防火墙允许 Nginx 访问这些服务端口。

小结

通过这种方式,你可以利用不同的域名来访问本机的不同服务,且不需要为每个服务单独配置不同的端口,所有的请求都通过 80 端口进行访问,非常适合做反向代理。

Nginx 设置强制 HTTPS,并代理本机端口!

Nginx 设置强制 HTTPS,且将 HTTP 请求(80端口)重定向到 HTTPS,同时将 HTTPS 的请求反向代理到本机的 8090 端口。这样一来,用户访问该项目时,Nginx 会强制使用 HTTPS 并通过反向代理将请求转发到本机的服务。

下面是一个配置示例,假设你的项目需要通过 https://yourdomain.com 来访问。

Nginx 配置示例:

# HTTP 到 HTTPS 强制重定向
server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;

    # 强制重定向到 HTTPS
    return 301 https://$host$request_uri;
}

# HTTPS 反向代理到本机的 8090 端口
server {
    listen 443 ssl;
    server_name yourdomain.com www.yourdomain.com;

    # SSL 配置
    ssl_certificate /etc/nginx/ssl/yourdomain.crt;  # 你的 SSL 证书
    ssl_certificate_key /etc/nginx/ssl/yourdomain.key;  # 你的证书私钥
    ssl_protocols TLSv1.2 TLSv1.3;  # 启用的 SSL 协议
    ssl_prefer_server_ciphers off;  # 客户端选择密码套件优先

    # 配置 HTTP 头部
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options nosniff;

    # 反向代理配置
    location / {
        proxy_pass http://127.0.0.1:8090;  # 将请求代理到本机的 8090 端口
        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_set_header X-Forwarded-Proto $scheme;
    }
}

配置说明:

  1. HTTP 到 HTTPS 强制重定向

    • 第一个 server 块监听 80端口(HTTP),并通过 return 301 https://$host$request_uri; 强制将所有 HTTP 请求重定向到 HTTPS。
    • 这种方式确保了用户无论是否输入 http,都能被自动重定向到 https
  2. HTTPS 配置

    • 第二个 server 块监听 443端口(HTTPS),并配置了 SSL 证书和密钥。
    • ssl_certificatessl_certificate_key 分别指定了你的 SSL 证书文件和私钥文件的路径。
    • ssl_protocols 用于配置启用的协议和密码套件,这样可以提高安全性。
    • add_header Strict-Transport-Security 启用了 HTTP 严格传输安全(HSTS),强制客户端在一定时间内仅通过 HTTPS 访问该站点。
  3. 反向代理配置

    • proxy_pass 将 HTTPS 请求转发到本机的 http://127.0.0.1:8090,即你的私密项目服务。
    • proxy_set_header 配置了正确的头部,以便 Nginx 在代理请求时能够传递客户端的真实 IP 和请求协议。

证书和私钥:

确保你已经有了一个有效的 SSL 证书文件(例如 yourdomain.crt)和私钥文件(例如 yourdomain.key)。如果没有,可以通过像 Let’s Encrypt 这样的免费证书颁发机构获取证书。

配置生效:

  1. 检查 Nginx 配置语法:配置完成后,可以使用以下命令检查配置文件是否有错误:
    sudo nginx -t
    
  2. 重载 Nginx 配置:如果没有错误,重载 Nginx 以应用新的配置:
    sudo systemctl reload nginx
    

小结

通过这个配置,你的 Nginx 会做以下几件事:

  1. 强制将所有访问 http://yourdomain.com 的请求重定向到 https://yourdomain.com
  2. 通过 HTTPS 访问时,将请求反向代理到本机的 8090 端口,并传递必要的头部信息。

如果你有任何其他问题或需要进一步的帮助,随时告诉我!😊