Nginx代理HTTPS到Docker指定端口

简介: Nginx代理HTTPS到Docker指定端口

假设我在服务器上的 Docker 运行了一个应用,在 Docker 启动的时候,我指定他监听了 localhost 的 9000 端口,定向到 Docker 的 9002 的应用上。

那么,这个应用就是运行在了 Docker 的 9002 端口上、监听者 9000 端口,我只需要访问 localhost:9000 就可以使用这个应用。

现在把问题再复杂化一点:我有一个域名 test.jxtxzzw.com,一个 SSL 证书。

我现在想要访问 https://test.jxtxzzw.com 就可以访问这个应用,例如这是一个云盘的应用,那么我在访问了上面这个网址的时候,就可以使用了。

同时,这一台服务器上还运行着其他的应用,假设有博客、私有代码仓库等等。

首先明确,直接访问 http://test.jxtxzzw.com:9000 或者 http://111.222.111.222:9000 是可以的,但是 https://test.jxtxzzw.com:9000 是不行的(而且带着端口号不好看)。

由于我的服务器是 LNMP 环境的,所以可以使用 Nginx 反向代理到 Docker 的指定端口。

继续阅读这篇文章之前,您最好需要熟练掌握配置 Nginx 虚拟主机的基本知识,或者说至少已经使用过几个虚拟主机的配置文件并在带有注释的情况下能看懂绝大多数配置项的含义。

具体配置如下。

首选确认 /usr/local/nginx/conf/nginx.conf 里面启用了 MIME 的支持。

include       /etc/nginx/mime.types;

然后,在虚拟主机的配置文件(/usr/local/nginx/conf/vhost/test.jxtxzzw.com.conf)里面加上:

default_type  application/octet-stream;
 
upstream  test.jxtxzzw.com  {
    server   localhost:9000;
}

然后首先配置 HTTP 访问。

# http
server
{
    listen  80;
    server_name  test.jxtxzzw.com;
 
    # Force redirect to https
    # If you dont want https force redirect, comment out the rewrite line 
    rewrite ^/(.*) https://$server_name/$1 permanent;
 
    location / {
        proxy_pass        http://test.jxtxzzw.com;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
}

这里的关键是 4 个 proxy。

然后是 HTTPS 访问。也是一样的,只是监听端口变成了 443,然后需要指定 SSL(.crt 或者 .pem)。当然,还可以进行更多的 SSL 的配置,比如 session timeout 等。

ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;

proxy_pass 还是到 HTTP,不需要 https://test.jxtxzzw.com

# https
server
{
    listen  443 ssl;
    server_name  test.jxtxzzw.com;
    ssl_certificate     /home/wwwcert/test.jxtxzzw.com.pem; # .crt or .pem
    ssl_certificate_key /home/wwwcert/test.jxtxzzw.com.key;
    location / {
        proxy_pass        http://test.jxtxzzw.com;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
}

你已经发现了,本质上,这是利用了 Nginx 的负载均衡,有点杀鸡用牛刀的感觉。

但是问题不大,只有一台服务器的话,那就是 100% 负载了嘛。

了解更多 Nginx 负载均衡的配置,请自行谷歌。

目录
相关文章
|
25天前
|
缓存 Java 应用服务中间件
nginx的正向代理和反向代理以及tomcat
Nginx的正向代理和反向代理功能在不同的场景中具有重要作用,正向代理主要用于客户端访问控制和匿名浏览,而反向代理则用于负载均衡和高可用性服务。Tomcat作为Java Web应用服务器,与Nginx结合使用,可以显著提升Web应用的性能和稳定性。通过合理配置Nginx和Tomcat,可以构建高效、稳定和可扩展的Web服务架构。
130 11
|
3月前
|
监控 应用服务中间件 测试技术
确保正则表达式在 Nginx 代理中的准确性和稳定性
【10月更文挑战第19天】总之,正则表达式在 Nginx 代理中具有重要作用,但要确保其准确性和稳定性需要付出一定的努力和关注。通过以上方法的综合运用,我们可以提高正则表达式配置的可靠性,为用户提供更好的服务体验。
|
2月前
|
前端开发 应用服务中间件 定位技术
Nginx 如何代理转发传递真实 ip 地址?
【10月更文挑战第32天】
447 5
Nginx 如何代理转发传递真实 ip 地址?
|
2月前
|
负载均衡 前端开发 JavaScript
Nginx 代理多服务
以上是 Nginx 代理多服务的几种常见方式,在实际应用中,可以根据具体的业务需求和系统架构选择合适的代理方式,并结合其他 Nginx 的功能和配置来优化和完善系统的性能和功能。
|
3月前
|
负载均衡 应用服务中间件 Linux
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
这篇博客文章详细介绍了Nginx的下载、安装、配置以及使用,包括正向代理、反向代理、负载均衡、动静分离等高级功能,并通过具体实例讲解了如何进行配置。
212 4
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
|
2月前
|
负载均衡 应用服务中间件 nginx
基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
通过使用Nginx和Consul构建自动发现的Docker服务架构,可以显著提高服务的可用性、扩展性和管理效率。Consul实现了服务的自动注册与发现,而Nginx则通过动态配置实现了高效的反向代理与负载均衡。这种架构非常适合需要高可用性和弹性扩展的分布式系统。
51 4
|
2月前
|
负载均衡 应用服务中间件 nginx
基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
通过使用Nginx和Consul构建自动发现的Docker服务架构,可以显著提高服务的可用性、扩展性和管理效率。Consul实现了服务的自动注册与发现,而Nginx则通过动态配置实现了高效的反向代理与负载均衡。这种架构非常适合需要高可用性和弹性扩展的分布式系统。
69 3
|
3月前
|
应用服务中间件 API nginx
使用正则表达式实现 Nginx 代理
【10月更文挑战第19天】在不断发展的互联网技术中,掌握正则表达式在 Nginx 代理中的应用是非常重要的。不断探索和实践,将有助于我们在实际工作中更好地运用这一技术,提升项目的质量和效率。
|
3月前
|
缓存 负载均衡 应用服务中间件
Nginx 实现一个端口代理多个前后端服务
【10月更文挑战第19天】Nginx 的强大功能不仅限于此,它还可以与其他技术和工具相结合,为我们的应用提供更强大的支持和保障。在不断发展的互联网时代,掌握 Nginx 的使用技巧将为我们的工作和生活带来更多的便利和效益。
|
3月前
|
存储 缓存 监控