私はDockerコンテナのホスト名を取得しようとしていますが、リバースプロキシしか使えないのでそのために、私は nginx の助けを借りてまさにそれを実現しようとしています。
1 つの Docker コンテナは、ポート 8080 をローカルホストに公開する Web サービスです。
したがって、次の方法で Web サーバーにアクセスできます。
http://localhost:8080
代わりに、以下を使用したいと思います。
http://webservice.local
そこで私は/etc/hosts
127.0.0.1 webservice.local
次に、nginx をインストールし、以下を追加しました/etc/nginx/sites-available/default
:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.html index.htm;
# Make site accessible from http://localhost/
server_name localhost;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
}
location webservice.local {
proxy_pass http://localhost:8080
}
nginx をリロードした後、ブラウザで ERR_CONNECTION_REFUSED
開こうとすると次のエラーが表示されます。http://webservice.local
何が間違っていたのでしょうか? リバース プロキシを適切に設定するにはどうすればよいでしょうか?
答え1
これが正しい構文かどうかはわかりません。次のように試してください:
upstream myupstream {
server 127.0.0.1:8080 fail_timeout=2s;
keepalive 32;
}
location / {
proxy_pass http://myupstream;
proxy_redirect http://myupstream/ /;
}
このような感じ。
しかし、ポート 8080 を 80 にリダイレクトしたいだけなら、socat のようなネットワーク ユーティリティを使用しないのはなぜでしょうか?
次に、各アップストリームに対して nginx に仮想ホストを追加し、それらの仮想ホストを DNS または /etc/hosts に追加して、すべて localhost に解決する必要があります。
または、アップストリームを回避して、次のように仮想ホストを使用することもできます。
server {
listen 80;
server_name myvirtualhost1.local;
location / {
proxy_pass http://127.0.0.1:8080;
}
server {
listen 80;
server_name myvirtualhost2.local;
location / {
proxy_pass http://127.0.0.1:9090;
}