一个托管在不同端口(81 和 82)上托管 2 个应用程序。Nginx 侦听端口 80,根据请求子域,它代理到所需的应用程序。例如:app1.domain.com和app2.domain.com
这些指令nginx是:
proxy_pass: http://domain.com:81/events- 请求/events,因为这是连接到 websocket 的 URL,为此您需要添加单独的指令proxy_pass: http://domain.com:81/- 对于所有其他请求
第一个问题:
checkOrigin该应用程序使用 websockets,默认情况下库中的实现检查 Origin 标头和请求 URL 之间的匹配(在 librarygorilla/websocket中以 language调用函数Go) - 因此请求失败,因为 Origin:app1.domain.com/events和请求网址:domain.com:81/events. 该库允许您重新定义函数checkOrigin,以便它始终返回true并跳过请求。但我对如何代理来自 nginx 的请求感兴趣,这样就不需要编辑应用程序本身的代码 - 也就是说,使 Origin 与请求 URL 匹配。
第二个问题:
我是否正确理解在这种情况下 ( proxy_pass: http://domain.com/) 请求再次通过 DNS,从而增加了响应之前的延迟?我是否理解正确,那么最好做什么或proxy_pass: http://localhost:81/添加一行?127.0.0.1 domain.com/etc/hosts
似乎写这样的东西就足够了:
如果两个块中的所有指令
proxy_set_header都匹配,那么您可以将它们移动到server.