Nginx를 사용하여 컨테이너에 액세스

Nginx를 사용하여 컨테이너에 액세스

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;
}

관련 정보