首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Google平台与Nginx反向代理

问Google平台与Nginx反向代理
EN

Server Fault用户
提问于 2018-01-31 01:33:10
回答 1查看 4.4K关注 0票数 1

我对这件事很陌生,所以我很抱歉,如果我的条件不对的话。我想要实现的是Nginx的反向代理,其中我监听https (端口443)和MQTT (端口8883),并将它们传递到它们各自的后端服务器。我正在学习这个教程:

https://www.nginx.com/blog/nginx-and-iot-adding-protocol-awareness-for-mqtt/

而且我能够让MQTT的东西工作到我的aws后端。不过,在将https请求发送到google云平台时,我遇到了一些问题。这是我的nginx.conf:

代码语言:javascript
复制
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 768;
        # multi_accept on;
}

stream {
    upstream gcp_backend {
         server mysite.appspot.com:443;
    }

    server {
        listen 443;
        #proxy_pass gcp_backend;
        proxy_pass mysite.appspot.com:443;
    }

    upstream mqtt_backend {
         server mysite.iot.us-west-1.amazonaws.com:8883;
    }

    server {
        listen 8883; # (tcp)
        proxy_pass mqtt_backend;
    }
}

我运行nginx -v并得到"nginx/1.10.3“。我是在覆盆子上运行这个的,我通过dyndns.org拥有一个域名。当我去https://somewhere.dyndns.org/api-name-here时,我会得到一个404错误。我想这可能是因为防火墙阻止了Google上的请求,但我不确定。我也尝试过在Google上使用自定义域,但我当时认为这不是我想要的。我想在raspberry pi上浏览Nginx,并将其proxy_pass转到Google后端。

如前所述,MQTT通过端口8883为我提供了这个设置,但也许AWS并不是因为某种原因而拒绝的。我认为Google是一个错误,因为我的dyndns.org不是像appspot.com这样的允许的域名。

谢谢你能给我的任何帮助,或者我应该研究/寻找什么条件。

贾斯汀

EN

回答 1

Server Fault用户

发布于 2018-01-31 07:47:07

MQTT需要流协议,因此您需要分离HTTPS和流配置。像这样的事情应该可以做到:

代码语言:javascript
复制
stream {

    upstream mqtt_backend {
         server mysite.iot.us-west-1.amazonaws.com:8883;
    }

    server {
        listen 8883; # (tcp)

        location / { 
           proxy_pass mqtt_backend;
        }
    }
}

http {
    upstream gcp_backend {
         server mysite.appspot.com:443;
    }
    server {
        listen 443;
        #proxy_pass gcp_backend;

     location / {
        proxy_pass mysite.appspot.com:443;
      }
    }
}

此外,要侦听ssl,您需要启用ssl并安装证书,否则将得到协议错误。你至少需要:

代码语言:javascript
复制
    server {
        listen 443 ssl;
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

        ...
    }

而且很可能:

代码语言:javascript
复制
server {
    listen 8883 ssl; # (tcp)
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    ...
}
票数 2
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/894886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档