很难写出一个合适的标题。
我有一个基于快速服务器的纯websocket应用程序。在开发模式下,快速服务器执行一些简单的路由来访问html,js和png文件。基本上它是一个只处理websocket协议的单页应用程序。但在生产模式下,我将所有这些委托给Nginx,因此我不会在快递生产中做任何路由。我期待Nginx会在其" root"上找到所有这些文件。目录。我得到一个"无法得到/"然而错误。
TL; DR版本:
当我使用Nginx为单页应用程序提供静态内容时,我是否需要在快速路由中执行任何操作?如果是这样,怎么样?
UPD (我的Nginx设置,可以找到另一个更详细的问题here):
upstream upstream_project {
server 127.0.0.1:8888;
keepalive 64;
}
server {
listen 0.0.0.0:80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/local/share/html;
index index.html index.htm;
# Make site accessible from http://localhost/
server_name ws_server;
location / {
try_files $uri $uri/ index.html;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://upstream_project;
proxy_read_timeout 240s;
}
}
已更新:
我在Nginx日志中发现客户端正试图通过ipv6访问服务器。见:
kevent() reported that connect() failed (61: Connection refused) while
connecting to upstream, client: ::1, server: ws_server, request: "GET /
HTTP/1.1", upstream: "http://127.0.0.1:8888/", host: "localhost"
我删除了ipv6服务器监听行(listen [::]:80 default_server ipv6only=on;
),并且必须更改try_files
行以明确使用文件名。
try_files $uri $uri/app.js ;
然后我可以让我的应用运行起来。但我不明白。我为什么要这样做?
我仍然无法从" root"的子目录访问静态png文件。夹。任何帮助将不胜感激。
答案 0 :(得分:0)
NGINX支持WebSocket,允许在客户端和后端服务器之间建立隧道。要使NGINX将升级请求从客户端发送到后端服务器,必须明确设置升级和连接标头,如下例所示:
location /wsapp/ {
proxy_pass http://wsbackend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
有关详细信息和示例,请查看此NGINX guide。