麦克的茶馆


  • 首页

  • 归档

  • 关于我

  • 搜索

Nginx配置指南:支持多域名HTTPS和代理协议

时间: 2024-08-31 分类: 技术   字数: 1111 字 阅读: 3分钟 阅读次数:

Nginx配置指南:支持多域名HTTPS和proxy_protocol协议

引言 在当今的web服务架构中,Nginx作为一个强大的web服务器和反向代理服务器,扮演着至关重要的角色。本文将详细介绍如何配置Nginx以支持多域名HTTPS和代理协议,涵盖了几种常见的场景。我们将从基本的配置开始,逐步深入到更复杂的设置。

场景1:多域名HTTPS和SNI

首先,让我们看看如何配置Nginx来支持多个HTTPS域名,并使用SNI(服务器名称指示)将流量路由到不同的后端服务器。

stream {
log_format basic '$remote_addr [$time_local] '
                 '$protocol $status $bytes_sent $bytes_received '
                 '$session_time "$upstream_addr" '
                 '"$ssl_preread_server_name"';

access_log /var/log/nginx/stream-access.log basic;
error_log /var/log/nginx/stream-error.log;

map $ssl_preread_server_name $backend_name {
    example1.com backend1;
    example2.com backend2;
    default backend_default;
}

upstream backend1 {
    server 192.168.1.10:443;
}

upstream backend2 {
    server 192.168.1.20:443;
}

upstream backend_default {
    server 192.168.1.30:443;
}

server {
    listen 443;
    proxy_pass $backend_name;
    ssl_preread on;
    proxy_protocol on;
}

} 这个配置的主要特点:

使用stream模块处理TCP流量。 定义自定义日志格式,包含SNI信息。 使用map指令根据SNI选择后端服务器。 配置多个上游服务器组。 在服务器块中启用SSL预读和代理协议。

场景2:后端Nginx HTTPS服务器配置

当后端服务器也使用Nginx时,我们需要配置它来处理HTTPS请求并支持代理协议。以下是一个示例配置:

http {
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;
error_log /var/log/nginx/error.log;

set_real_ip_from 192.168.1.0/24;
real_ip_header proxy_protocol;

server {
    listen 443 ssl proxy_protocol;
    server_name example1.com;

    ssl_certificate /path/to/your/fullchain.pem;
    ssl_certificate_key /path/to/your/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";

    root /var/www/example1.com;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
}

} 这个配置的主要特点:

启用代理协议以获取真实客户端IP。 配置SSL证书和安全选项。 添加安全相关的HTTP头。 设置网站根目录和默认文件。

场景3:后端HTTP服务代理

有时,后端服务可能运行在HTTP上,而我们希望在前端提供HTTPS。以下是如何配置Nginx作为SSL终止代理:

http {
# ... 之前的日志和IP配置 ...

upstream backend {
    server 127.0.0.1:8200;
}

server {
    listen 443 ssl proxy_protocol;
    server_name example1.com;

    # ... SSL配置和安全头部 ...

    location / {
        proxy_pass http://backend;
        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;
    }
}

} 这个配置将HTTPS请求转发到本地运行的HTTP服务,同时保留客户端信息。

场景4:处理不支持代理协议的后端HTTPS服务

最后,让我们看看如何处理前端使用代理协议,但后端HTTPS服务不支持代理协议的情况:

stream {
# ... 之前的日志配置 ...

upstream backend_with_proxy_protocol {
    server 127.0.0.1:8443;
}

upstream real_backend {
    server 192.168.1.10:443;
}

server {
    listen 443;
    proxy_pass backend_with_proxy_protocol;
    ssl_preread on;
    proxy_protocol on;
}

server {
    listen 8443 proxy_protocol;
    proxy_pass real_backend;
}

} 这个配置创建了一个中间层,它接收带有代理协议的连接,然后将纯HTTPS流量转发给后端服务。

结论

通过这些配置示例,我们展示了Nginx在处理HTTPS流量、支持多域名、使用代理协议以及作为SSL终止代理方面的灵活性。根据您的具体需求,您可以混合和匹配这些配置来创建适合您的架构的设置。

记住,在应用这些配置时,始终要根据您的实际环境调整IP地址、域名和证书路径。此外,定期更新Nginx和SSL证书,并关注最新的安全最佳实践,以确保您的服务器配置始终安全和高效。

#nginx# #stream# #https#
配置goaccess 访问日志系统
配置nginx,使用stream 模式,并且传递realip 给server
mike163

mike163

30 日志
2 分类
57 标签
GitHub
友情链接
  • JFinal
  • Bookmarks
标签云
  • Nginx 6
  • Centos 3
  • Stream 3
  • Tls 3
  • Cloudflare 2
  • DNS 2
  • Er x 2
  • HTTPS 2
  • Iptable 2
  • Ipv6 2
© 2010 - 2024 麦克的茶馆
Powered by - Hugo v0.120.4 / Theme by - NexT
/
Storage by Gitee 仓库 / 粤 ICP 备 号
0%