Angular 9 + Nginx = 404 深度链接时
Angular 9 + Ngnix = 404 when deeplinking
我正在使用 nginx
.
创建一个带有 Loopback 4
后端的 Angular 9
应用程序
使用 ng serve
时,我可以毫无问题地导航到不同的页面并刷新页面。但是,在推送到登台服务器后,我可以导航该应用程序,但如果我刷新任何不是 staging.mydomain.com/
的页面,我会收到 404 错误。
我尝试将 try_files $uri $uri/ /index.html;
添加到我的 nginx.conf
文件的 location
部分,但是当我这样做时,甚至索引页面也不再加载。
下面您将看到我的 nginx.conf
文件的 server
部分:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name staging.mydomain.com; # managed by Certbot
root /usr/share/nginx/html;
ssl_certificate /etc/letsencrypt/live/staging.mydomain.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/staging.mydomain.com/privkey.pem; # managed by Certbot
# Load configuration files for the default server block.
include /etc/letsencrypt/options-ssl-nginx.conf;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
location / {
#try_files $uri $uri/ /index.html;
proxy_pass http://127.0.0.1:3004;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Conneciton 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
server {
listen 80;
server_name staging.mydomain.com;
return 301 https://staging.mydomain.com$request_uri;
}
是否有人能够提供一些指导以使我的深层链接正常工作?
尝试在代理传递声明的末尾添加一个额外的 /
。
location / {
#try_files $uri $uri/ /index.html;
proxy_pass http://127.0.0.1:3004/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Conneciton 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
- 请注意
proxy_pass
中 尾部 斜杠的极端重要性,它会自动更改 $uri 变量以在前端具有 /foo
与后端的 /
相对应。不需要明确的重写指令。
哎呀,这不是 nginx
问题。这是一个 Loopback
配置问题。
我将以下内容添加到我的 application.ts
文件以将所有未捕获的请求转发到 index.html
以供 Angular 捕获和处理。
this.static('*', path.join(__dirname, '../public/index.html'));
添加该静态路径后,一切都开始正常工作。
我正在使用 nginx
.
Loopback 4
后端的 Angular 9
应用程序
使用 ng serve
时,我可以毫无问题地导航到不同的页面并刷新页面。但是,在推送到登台服务器后,我可以导航该应用程序,但如果我刷新任何不是 staging.mydomain.com/
的页面,我会收到 404 错误。
我尝试将 try_files $uri $uri/ /index.html;
添加到我的 nginx.conf
文件的 location
部分,但是当我这样做时,甚至索引页面也不再加载。
下面您将看到我的 nginx.conf
文件的 server
部分:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name staging.mydomain.com; # managed by Certbot
root /usr/share/nginx/html;
ssl_certificate /etc/letsencrypt/live/staging.mydomain.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/staging.mydomain.com/privkey.pem; # managed by Certbot
# Load configuration files for the default server block.
include /etc/letsencrypt/options-ssl-nginx.conf;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
location / {
#try_files $uri $uri/ /index.html;
proxy_pass http://127.0.0.1:3004;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Conneciton 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
server {
listen 80;
server_name staging.mydomain.com;
return 301 https://staging.mydomain.com$request_uri;
}
是否有人能够提供一些指导以使我的深层链接正常工作?
尝试在代理传递声明的末尾添加一个额外的 /
。
location / {
#try_files $uri $uri/ /index.html;
proxy_pass http://127.0.0.1:3004/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Conneciton 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
- 请注意
proxy_pass
中 尾部 斜杠的极端重要性,它会自动更改 $uri 变量以在前端具有/foo
与后端的/
相对应。不需要明确的重写指令。
哎呀,这不是 nginx
问题。这是一个 Loopback
配置问题。
我将以下内容添加到我的 application.ts
文件以将所有未捕获的请求转发到 index.html
以供 Angular 捕获和处理。
this.static('*', path.join(__dirname, '../public/index.html'));
添加该静态路径后,一切都开始正常工作。