问题:Nginx 不会根据我在单独的配置文件中定义的规则路由流量,而只是显示默认的 404 响应。
语境:我有一个用 Go 编写的小型中间件应用程序,它为 GET 请求提供简单的响应。该应用程序部署在端口 8080 上:
$ curl localhost:8080
ok
我希望编写一个 Nginx 配置,允许我路由来自/api到本地主机:8080,这将允许我执行以下操作
$ curl localhost/api
ok
为了实现这一点,我编写了以下配置:
/etc/nginx/sites-available/自定义-nginx-rules
server {
listen 80;
location /api {
proxy_pass http://localhost:8080;
}
}
我还创建了一个软链接/etc/nginx/sites-enabled/对于上述文件
$ ls -l /etc/nginx/sites-enabled
total 0
lrwxrwxrwx 1 root root 34 Jan 19 16:42 default -> /etc/nginx/sites-available/default
lrwxrwxrwx 1 root root 32 Feb 20 14:56 custom-nginx-rules -> /etc/nginx/sites-available/custom-nginx-rules
其余设置都是原始的 Nginx,没有任何变化。尽管设置简单,但在进行以下调用时,我得到了 404:
$ curl localhost/api
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.10.3</center>
</body>
</html>
其他信息:以下是我的系统上安装的 nginx 包(在树莓派上运行)
$ dpkg -l | grep nginx
ii libnginx-mod-http-auth-pam 1.10.3-1+deb9u1 armhf PAM authentication module for Nginx
ii libnginx-mod-http-dav-ext 1.10.3-1+deb9u1 armhf WebDAV missing commands support for Nginx
ii libnginx-mod-http-echo 1.10.3-1+deb9u1 armhf Bring echo and more shell style goodies to Nginx
ii libnginx-mod-http-geoip 1.10.3-1+deb9u1 armhf GeoIP HTTP module for Nginx
ii libnginx-mod-http-image-filter 1.10.3-1+deb9u1 armhf HTTP image filter module for Nginx
ii libnginx-mod-http-subs-filter 1.10.3-1+deb9u1 armhf Substitution filter module for Nginx
ii libnginx-mod-http-upstream-fair 1.10.3-1+deb9u1 armhf Nginx Upstream Fair Proxy Load Balancer
ii libnginx-mod-http-xslt-filter 1.10.3-1+deb9u1 armhf XSLT Transformation module for Nginx
ii libnginx-mod-mail 1.10.3-1+deb9u1 armhf Mail module for Nginx
ii libnginx-mod-stream 1.10.3-1+deb9u1 armhf Stream module for Nginx
ii nginx 1.10.3-1+deb9u1 all small, powerful, scalable web/proxy server
ii nginx-common 1.10.3-1+deb9u1 all small, powerful, scalable web/proxy server - common files
ii nginx-full 1.10.3-1+deb9u1 armhf nginx web/proxy server (standard version)
我还要求此设置独立于任何主机或服务器名称。它应该无论主机是什么,都能进行路由。
运行该nginx -T
命令确认文件已加载。错误日志也是空的。
答案1
删除符号链接default
并/etc/nginx/sites-enabled
重新启动 nginx。
否则,此default
配置将用于custom-nginx-rules
在