使用nginx将TCP流量保护到后端服务器

时间:2017-04-13 18:13:47

标签: ssl nginx

我有一个由前端和后端服务组成的网络应用程序。我想通过加密证书来保护我的前端服务,但后来我必须在前端和后端之间使用安全连接。我在自定义端口上提供后端服务。为了保护后端,我想使用nginx来代理我的服务器。但是,我正在努力做到正确。这是我的nginx配置:

server {
    listen 8082;
    server_name <my_domain_name>;

    ssl on;
    ssl_certificate           /etc/letsencrypt/live/<my_domain>/fullchain.pem;
    ssl_certificate_key       /etc/letsencrypt/live/<my_domain>/privkey.pem;
    ssl_ciphers               HIGH:!aNULL:!MD5;
    ssl_protocols             TLSv1 TLSv1.1 TLSv1.2 SSLv3;
    location / {
        proxy_pass http://0.0.0.0:8081;
    }
}

首先,我只想通过,没有ssl。但它没有像这样工作,8082没有提供任何东西。如果它可以工作,我想我可以在这里使用我的letsencrypt证书,虽然我不确定,是否可能并且我理解正确。< / p>

我将不胜感激任何帮助!非常感谢提前!

更新

我发现问题出在iptables中。我将端口8082添加到它们后,它工作。我不明白,为什么我可以连接到端口8081,虽然它不在iptables中。

但是,现在,当我尝试https://my_domain:8082时,我会得到ERR_SSL_PROTOCOL_ERROR

我还尝试将ssl添加到listen指令,例如listen 8082 ssl;。然后我得到ERR_CONNECTION_RESET

2 个答案:

答案 0 :(得分:1)

仅供记录。问题确实存在于指令listen中。 添加

listen 8082 ssl;

并删除

ssl on;

解决了它。

这是一个谜,为什么它不起作用并且之前给了我ERR_CONNECTION_RESET。现在它有效。

答案 1 :(得分:0)

location @backend {
    proxy_pass http://backend;
}

@backend是一个命名位置,允许您像变量一样引用它,例如

location / {
    error_page 404 = @backend;
}

为您的问题尝试类似

location / {
    proxy_pass http://backend;
}