proxy_pass の変数を使用して、アップストリームが見つからない場合に nginx がクラッシュするのを防ごうとしました (このスタックオーバーフロー スレッドで説明されているように):
# Set front-dev in a variable to let nginx start even if it is not accessible (which is the case in production)
set $frontdev front-dev;
resolver 127.0.0.11 [::1]; # in a docker environment
location /dev/ {
proxy_pass http://$frontdev:4200/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
そうすれば、nginx はクラッシュせずに起動しますが、アップストリームに接続すると、リソースの代わりに空の html ページが返されます。
Firefox は次のエラーを返します。
Uncaught SyntaxError: expected expression, got '<' jquery.min.js:1
このファイルは次の代わりに返されるためjquery.min.js
:
<!doctype html>
<html lang="en">
<head>
<title>Shanoir</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" href="assets/images/favicon.ico" type="image/x-icon">
<link href="assets/css/awesome.min.css" rel="stylesheet">
<script src="/auth/js/keycloak.js"></script>
<script defer type="text/javascript" src="assets/papaya-nojquery/jquery.min.js"></script>
<script defer type="text/javascript" src="assets/papaya-nojquery/papaya.js"></script>
<script defer type="text/javascript" src="assets/jszip.min.js"></script>
</head>
</head>
<body>
<app-root></app-root>
<script src="runtime.js" type="module"></script><script src="polyfills.js" type="module"></script><script src="styles.js" type="module"></script><script src="vendor.js" type="module"></script><script src="main.js" type="module"></script></body>
</html>
nginx のログは次のとおりです。
shanoir-ng-nginx | 172.18.0.1 - - [16/Nov/2020:15:55:09 +0000] "GET /dev/ HTTP/1.1" 200 408 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:82.0) Gecko/20100101 Firefox/82.0" "-"
shanoir-ng-nginx | 172.18.0.1 - - [16/Nov/2020:15:55:09 +0000] "GET /dev/assets/css/awesome.min.css HTTP/1.1" 200 408 "https://shanoir-ng-nginx/dev/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:82.0) Gecko/20100101 Firefox/82.0" "-"
shanoir-ng-nginx | 172.18.0.1 - - [16/Nov/2020:15:55:09 +0000] "GET /dev/polyfills.js HTTP/1.1" 200 408 "https://shanoir-ng-nginx/dev/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:82.0) Gecko/20100101 Firefox/82.0" "-"
[...]
ノート
この構成は完全に機能しますが、nginx を開始する前にアップストリームを起動する必要があります。
# Front development with angular-cli server
location /dev/ {
proxy_pass http://front-dev:4200/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
何が欠けているのかわかりません。