目前我在 /usr/share/nginx/myexpress 里面有一个 express 应用程序
express 应用程序正在监听 3000 端口并正常运行。我的 NGINX 服务器正在反向代理它,我可以通过访问 kodix.com.br 查看默认的 express 页面。
问题是,路由后我无法访问 kodix.com.br/hello。我只能通过 IP 地址访问它。(与此示例类似,但使用其他号码:143.94.233.176:3000/hello)
这是我现在的可用站点nginx配置:
upstream node_app{
server 127.0.0.1:3000;
}
server {
root /usr/share/nginx/myexpress;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name kodix.com.br www.kodix.com.br;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
proxy_pass http://node_app;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
我该如何实现使用我的 nginx 服务器访问其他快速页面?
答案1
我不确定这是否是正确的方法,但我设法通过向服务器块添加位置块使其工作:
location /hello/ {
proxy_pass http://localhost:3000/hello;
}
然后,访问 myserver.com.br/hello 会将我重定向到正确的页面。
答案2
解决此问题的正常方法是使用命名位置。在此设置中,nginx 将首先提供静态内容。如果 URL 路径中不存在静态内容,则不会返回 404,而是将其传递到命名位置,然后将其发送到您的应用程序。
这是一个非常简单的添加:
location / {
try_files $uri $uri/ @express;
}
location @express {
proxy_pass http://node_app;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
PS 将您的 Web 文件存储在 中并不是一个好主意/usr/share/nginx
。此目录归包管理器所有,并且它有权在 nginx 包更新或删除时删除其中的所有内容。(它很可能不会这样做,但我不会冒这个风险。)