我对这件事很陌生,所以我很抱歉,如果我的条件不对的话。我想要实现的是Nginx的反向代理,其中我监听https (端口443)和MQTT (端口8883),并将它们传递到它们各自的后端服务器。我正在学习这个教程:
https://www.nginx.com/blog/nginx-and-iot-adding-protocol-awareness-for-mqtt/
而且我能够让MQTT的东西工作到我的aws后端。不过,在将https请求发送到google云平台时,我遇到了一些问题。这是我的nginx.conf:
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这样的允许的域名。
谢谢你能给我的任何帮助,或者我应该研究/寻找什么条件。
贾斯汀
发布于 2018-01-31 07:47:07
MQTT需要流协议,因此您需要分离HTTPS和流配置。像这样的事情应该可以做到:
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并安装证书,否则将得到协议错误。你至少需要:
server {
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
...
}而且很可能:
server {
listen 8883 ssl; # (tcp)
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
...
}https://serverfault.com/questions/894886
复制相似问题