やりたいこと
vps内でnginxとdocker composeを起動させ、nginxを介さないとdocker composeにアクセス出来ないようにしたい。
前提条件
vps
nginxはvpsに直接インストールされている。
docker composeではweb serverが起動している。
なぜ記事を書いたのか
まじで見つからなかった。みんなiptableに穴開ける方法かdocker compose内でnginx立てる方法ぐらいしか語ってない。どうして...。
そんな私の備忘録的な記事になります。
解決法
簡単でした。docker-compose.ymlでport指定するときに127.0.0.1:8000:8000
とするだけでした。
以下の画像はswagger-uiを構築した時のdocker composeです。参考程度に...。
swagger-ui:
image: swaggerapi/swagger-ui
container_name: "swagger-ui"
ports:
- "127.0.0.1:12360:8080"
volumes:
- ./api/openapi.yaml:/openapi.yaml
environment:
SWAGGER_JSON: /openapi.yaml
結論からすればnetworkを定義する必要もなければ、internal指定をする必要もなかったわけですね。
nginx側では、普通にlocalhostに通信を流してあげれば出来ました。
便利!
location / {
proxy_pass http://localhost:12360/;
proxy_http_version 1.1;
client_max_body_size 150M;
proxy_connect_timeout 300;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}