我正在尝试配置一个nginx Docker容器,以在其根路径上为Angular应用程序提供服务(目前为止有效(,并通过/api上的代理使后端可用。
我在Stackoverflow和一些博客上读过多个线程,但到目前为止还没有配置。如果我打开我的应用程序,Angular应用程序就会工作。当我试图在同一个url上调用/api时,它会被重定向到/,并且没有显示任何内容——我想Angular路由器得到了一些它无法处理的路由。但是Nginx应该在调用Angular应用程序之前赶上这条路线。我该怎么做?
我不确定出了什么问题。你在我的配置中看到错误了吗?
server {
listen 80;
sendfile on;
default_type application/octet-stream;
gzip on;
gzip_http_version 1.1;
gzip_disable "MSIE [1-6].";
gzip_min_length 256;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_comp_level 9;
location / {
root /usr/share/nginx/html;
try_files $uri $uri/ /index.html =404;
}
location /api/ {
proxy_pass http://host.docker.internal:8080/api/;
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;
}
}
第1版:我发现一个问题:容器无法访问api服务器。我在配置中将其更改为host.docker.internal,可以通过docker ci
访问。但是我仍然无法在nginx容器上调用/api。我现在得了404分。
我会使用下面的语法让Nginx知道这是在您的通用位置之前出现的。
location ^~ /api/ { }
您可以在此处阅读更多信息->https://www.journaldev.com/26342/nginx-location-directive
事实证明,上面的配置是有效的,我在另一个项目的错误文件夹中。