All*_*ome 5 reverse-proxy nginx meteor
我已经配置了流星服务器并设置了nginx配置.但是,当路由配置动态子域以指向Web应用程序的特定部分时,它会在加载流星文件时在浏览器上产生404错误.
我试图将所有*.domain.com
到http://localhost:3000/booking/
我的配置是:
server {
server_name *.domain.com;
listen 80;
location / {
proxy_pass http://localhost:3000/booking/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade; #for websockets
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
}
}
Run Code Online (Sandbox Code Playgroud)
404发生在Meteor JS文件中.
如果我删除上面的nginx子域配置并转到子域它完美地工作,加载路由应用程序.我假设我错过了正确加载应用程序的东西.
只有当我proxy_pass
到URL中的路由时才会出现此问题<url>/booking
我有一个类似的设置,我在几个子域上配置了不同的 Meteor 应用程序,并在域根上配置了一个静态网站,所有这些都指向不同的端口。
这是我的逐步设置。
文件夹结构、位置和代理通行证
首先要考虑的是文件夹结构。根据您的子域的 VHost-root 目录,存在子域的应用程序文件夹的相对路径。
想象一下以下设置:
/www (dir, usually under /var)
/domain (dir)
/websitexy (dir, a static website is deployed under this dir)
/subdomain (dir)
/books (dir, subdomain app is deployed under this dir)
Run Code Online (Sandbox Code Playgroud)
对于这样的设置,我将 nginx 配置指向子域中应用程序的位置:
location /books {
Run Code Online (Sandbox Code Playgroud)
第一次启动我的应用程序时,我遇到了类似的问题。我发现的一件事是,在我的私人ip/port
组合上设置 proxy_pass 时,我的配置有效:
proxy_pass http://172.x.x.x:3000;
Run Code Online (Sandbox Code Playgroud)
这还涉及删除/books
此条目上端口号之后的路由名称 ( )。现在,您的代理通行证涉及子域内的所有路由。
路由注意事项
请注意,这里的路由可能会造成混淆。通过设置该location
属性,您可以在 nginx 级别(服务器的目录结构)上设置路由,这就是代理传递中没有路由的原因。
您的应用程序可能定义了自己的内部路由。重要的是,您的应用程序的内部路由器从其应用程序的根目录检索所有请求。这就是为什么代理传递不要在端口号后面包含任何路径很重要。
网络套接字
我读过一些关于nginx 和 websocket连接的文章。基本上我的初始设置来自这篇文章,看起来像这篇文档文章:
location /app {
proxy_pass 172.x.x.x;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
Run Code Online (Sandbox Code Playgroud)
我还必须添加一个proxy_read_timeout
andproxy_send_timeout
因为 websocket 协议存在问题,否则:
默认情况下,如果代理服务器在 60 秒内没有传输任何数据,连接将被关闭。可以使用 proxy_read_timeout 指令增加此超时
所以我还设置了超时值:
proxy_read_timeout 36000s;
proxy_send_timeout 36000s;
proxy_set_header Connection "upgrade";
Run Code Online (Sandbox Code Playgroud)
总结我的设置如下(使用您的应用程序凭据):
location /books {
proxy_pass http://172.x.x.x:3000;
proxy_http_version 1.1;
proxy_read_timeout 36000s;
proxy_send_timeout 36000s;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
}
Run Code Online (Sandbox Code Playgroud)
因此,为了解决您的情况,您可以检查您的虚拟主机目录(部署您的应用程序的目录,请参阅上面的文件夹结构)并相应地更改您的location
设置proxy_pass
。
如果这不起作用,您可能需要添加更多错误输出,例如尝试连接时的日志摘录。
归档时间: |
|
查看次数: |
556 次 |
最近记录: |