Centos 7サーバーがあります。このサーバーにはNginxがあります。
このサーバーには私のアプリケーションを含むDockerがあります。
application.yml:
version: '2'
services:
myBrand-app:
image: myBrand
environment:
- _JAVA_OPTIONS=-Xmx512m -Xms256m
- SPRING_PROFILES_ACTIVE=prod,swagger
- SPRING_DATASOURCE_URL=jdbc:postgresql://myBrand-postgresql:5432/myBrand
- SLEEP=10 # gives time for the database to boot before the application
ports:
- 8080:8080
myBrand-postgresql:
extends:
file: postgresql.yml
service: myBrand-postgresql
私のサーバーのIP経由でNginxプロキシを介してDockerにアクセスできますか?
Nginxをコンテナのリバースプロキシとして使用したいと思います。
答え1
インターネットから自分のサーバーが実行されているローカルホストポートに直接トラフィックをルーティングするようにnginxを設定する方法は次のとおりです。
nginxをインストールすると、通常はこの場所にデフォルトの設定ファイルがインストールされます。
cat /etc/nginx/nginx.conf
上記ファイルの下部付近には、次の内容が表示されます。
include /etc/nginx/sites-enabled/default;
}
以下のように上記の基本ファイルを生成する代わりに
cat /etc/nginx/sites-enabled/default;
これには以下を含めることができます
server {
listen 80 ;
server_name example.com, www.example.com;
rewrite ^/(.*) https://example.com/$1 permanent; # mysettings
}
# .................. enduser .................. #
server { # redirect www to normal domain
listen 443 ssl ;
server_name www.example.com;
include /etc/nginx/mysettings/include/ssl;
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl ;
include /etc/nginx/mysettings/include/ssl;
server_name example.com;
include /etc/nginx/snippets/nginx_common_location_443;
location / {
# route to enduser
proxy_pass http://127.0.0.1:3000/;
}
include /etc/nginx/mysettings/include/custom_server_include;
}
上にこの部分が見えます。
location / {
# route to enduser
proxy_pass http://127.0.0.1:3000/;
}
これは、外部インターネットからマイサーバーの指定されたホストとポートにトラフィックを転送するパスを定義します。上記の例では127.0.0.1:3000です。あなたの場合、私の3000をポート8080に置き換えてください...今ブラウザ
https://example.com
トラフィックが実行されているホストポートにルーティングされます。
http://127.0.0.1:3000/
完全性を期すために、上記の設定ファイルに記載されているヘルパー設定ファイルのいくつかを紹介します。
cat /etc/nginx/myconfig/include/ssl;
のように見える
#
# Based on https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=nginx-1.4.6&openssl=1.0.1f&hsts=yes&profile=modern
ssl_certificate /mydir/nginx/sslcerts/example.com/fullchain.pem;
ssl_certificate_key /mydir/nginx/sslcerts/example.com/privkey.pem;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:5m;
# Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
そしてここに別の設定ファイルがあります
cat /etc/nginx/snippets/nginx_common_location_443;
含む
# the following is required for WebSockets
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
定義するパスが複数ある場合は、それらをファイルに入れることができます。
cat /etc/nginx/myconfig/include/custom_server_include;
似ているようです
if ( $request_method !~ ^(GET|POST|PUT|PATCH|DELETE|OPTIONS)$ ) {
# now send to error
return 404;
}
location ~* \.(php)$ {
# matches any request ending in php
return 403;
}
location /apataki {
proxy_pass http://localhost:28778/;
}
location /hooks/ {
# this is my webhook server
proxy_pass http://localhost:9000/hooks/;
}
# .......
error_page 404 /error_404.html;
location = /error_404.html {
root /cryptdata/var/deploy;
}
error_page 502 /error_502.html;
location = /error_502.html {
root /cryptdata/var/deploy;
}