【发布时间】:2019-02-16 20:25:22
【问题描述】:
我目前正在尝试为两个 Angular 应用程序创建反向代理。 我希望这些应用程序都可以通过启用 SSL 的 docker 主机的 443 端口访问(如https://192.168.x.x/app1 和https://192.168.x.x/app2),这样用户就不必为每个应用程序输入端口号。
我的设置是,应用程序的每个部分都在其自己的 Docker 容器中运行: - 容器 1:Angular App 1(端口 80 在端口 8080 上暴露给主机) - 容器 2:Angular App 2(端口 80 在端口 8081 上暴露给主机) - 容器 3:反向代理(443 端口暴露)
Angular 应用程序和反向代理都在 nginx 上运行。应用程序是这样构建的:ng build --prod --base-href /app1/ --deploy-url /app1/
应用的nginx设置是这样的:
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;
root /usr/share/nginx/html;
index index.html index.htm;
location / {
try_files $uri $uri/ /index.html =404;
}
}
反向代理的nginx配置是这样的:
server {
listen 443;
ssl on;
ssl_certificate /etc/nginx/certs/domaincertificate.cer;
ssl_certificate_key /etc/nginx/certs/domain.key;
location /app1/ {
proxy_pass http://192.168.x.x:8080;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_cache_bypass $http_upgrade;
}
location /app2/ {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_cache_bypass $http_upgrade;
proxy_pass http://192.168.x.x:8081;
}
}
如果我尝试在 url 'https://192.168.x.x/app1' 上打开应用程序,则会到达应用程序,但我收到所有静态文件的错误消息 'Uncaught SyntaxError: Unexpected token Errormessages from chrome
似乎返回的是应用程序的 index.html 而不是静态的 js 和 css 文件。我相信这是应用程序本身的 nginx 配置的问题。
我花了很长时间试图弄清楚如何解决这个问题,但还没有运气。我希望这里有人可以帮助我。
【问题讨论】:
-
我有同样的错误。有什么想法吗?
-
这不是一个错误,它返回 404 定义为 `try_files $uri $uri/ /index.html =404;` 我正在尝试轻推
baseHref和deployUrlangular.json 中的参数,但我尝试的每个排列都会导致意外行为。 -
类似,baseHref: "/app2/" 和它的排列...有时更改它会重定向到包含路径!!!
-
您能告诉我们客户端资产调用的 URL 是什么吗?
-
所以问题是它在另一个角度应用程序 inside 的子目录中,并且 proxy_pass 是 URL 重写,但是应用程序正在“加载”,因此添加了 deployUrl和 baseHref “hack”,因为它不能按预期工作,应用程序可以加载。问题是我必须在所有路由中添加 /basepath/ 前缀,因为不需要的基本 href 与 proxy_pass 更改路径的方式发生冲突。
标签: angular docker nginx reverse-proxy nginx-reverse-proxy