
複数のサービスを持つドメインがある開発状況があります:
https://somewebpage.com
このサービスにはサブディレクトリとして複数のプロジェクトがあります
https://somewebpage.com
<- ランディングページhttps://somewebpage.com/api
<- REST API サーバーhttps://somewebpage.com/app
<- 私のアプリ
https://somewebpage.com/app
では、nginx と hosts ファイルをローカル ビルドにのみリバース プロキシするように設定することは可能ですか (また、その方法は) http://localhost:3000
?
問題は、アプリがデプロイされているときは/api
REST サーバーへのアクセスに問題がないが、ローカルでサービスを提供するときに nginx リバース プロキシがインターセプトしlanding page
、rest api server
URL も取得してしまうことです。
私の nginx 設定は次のようになります:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
index index.html;
proxy_max_temp_file_size 0;
proxy_buffering off;
server {
listen 80;
server_name somewebpage.com;
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name somewebpage.com;
ssl_certificate /etc/ssl/certs/certificate.crt;
ssl_certificate_key /etc/ssl/certs/ccertificate.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
location /app {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_pass http://localhost:3000;
}
}
}
そして私の中に/etc/hosts
は:
127.0.0.1 somewebpage.com
同様の結果を達成するための他のコツはありますか?
私がこれをやろうとする理由は、これを から実行すると、エラーlocalhost:3000
が応答されCORS
、 への呼び出しが拒否されるからです/api
。
それとも、これはセキュリティ上の危険が大きすぎるので、別のアクセス方法を要求する必要があるのでしょうか/api
?
事前にご回答いただきありがとうございます。
答え1
以下を追加する必要があります:
location / {
try_files $uri $uri/ =404;
}
これは、nginxに、他の指定されたものと一致しないリクエストをどのように処理するかを伝えます。nginxが使用するブロックlocation
を選択する方法の詳細については、以下を参照してください。location
nginx ドキュメント。
答え2
私にとって有効な解決策を 1 つ思いつきました。
somewebpage.com
静的 IP アドレスを指しているxx.xx.xx.xx
ので、Tero Kilkanen の回答と同様に、URL の代わりにその IP アドレスに転送する別のプロキシを追加しました。
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_pass https://xx.xx.xx.xx;
}
そうすれば、リクエストはドメイン解決をバイパスするため、/etc/hosts
ファイルはリクエストを傍受しません。somewebpage.com
最終的に、私にとってうまく機能する次の nginx 構成になりました。
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
index index.html;
proxy_max_temp_file_size 0;
proxy_buffering off;
server {
listen 80;
server_name somewebpage.com;
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name somewebpage.com;
ssl_certificate /etc/ssl/certs/certificate.crt;
ssl_certificate_key /etc/ssl/certs/ccertificate.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
location /app {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_pass http://localhost:3000;
}
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_pass https://xx.xx.xx.xx;
}
}
}
このソリューションは、舞台裏で複数の IP アドレスが使用されていたり、動的 IP アドレスなどがあるため、すべての人に有効であるとは限りません。しかし、私の場合は有効で、開発目的には十分でした。