簡體   English   中英

nginx 容器 proxy_pass 到另一個 docker 容器

[英]nginx container proxy_pass to another docker container

nginx.conf:

user  nginx;
worker_processes  auto;
error_log  /dev/null;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
    multi_accept on;
    use epoll;
}
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    sendfile on;
    log_format compression '$remote_addr - $remote_user [$time_local] '
                           '"$request" $status $body_bytes_sent '
                           '"$http_referer" "$http_user_agent" "$gzip_ratio"';
    access_log off;
    error_log /dev/null;
    log_not_found off;

    server_tokens off;
    server_names_hash_bucket_size 64;
    server_names_hash_max_size 2048;
    server_name_in_redirect off;

    client_body_timeout   300s;
    client_header_timeout 300s;
    keepalive_timeout     0;
    send_timeout          300s;

    client_body_buffer_size 64m;
    client_header_buffer_size 2m;
    client_max_body_size 48m;
    proxy_connect_timeout 70s;
    proxy_send_timeout 90s;
    proxy_read_timeout 90s;
    large_client_header_buffers 4 8k;

    ##
    # Gzip Settings
    ##
    gzip on;
    gzip_http_version 1.1;
    gzip_disable "msie6";
    gzip_static on;
    gzip_vary on; #vary header
    gzip_min_length 0; # compress though it's volume
    gzip_proxied any;
    gzip_comp_level 3; #low performance server: 2 and good server: 6
    gzip_buffers 16 8k;
    gzip_types text/plain text/css text/javascript text/xml application/javascript application/json application/x-javascript application/xml application/xml+rss image/svg+xml image/svg;
    limit_conn_zone $binary_remote_addr zone=ddos_conn:10m;
    limit_req_zone $binary_remote_addr zone=ddos_req:10m rate=4r/s;
    limit_req_status 500;
    server {
        listen       8010;
        server_name  0.0.0.0;
        client_max_body_size 48m;
        client_body_timeout   5s;
        client_header_timeout 5s;
        location / {
            proxy_pass http://0.0.0.0:8002;
            proxy_http_version  1.1;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-NginX-Proxy true;
            #proxy_ignore_client_abort  on; 
            proxy_redirect     off;
            proxy_connect_timeout 70s;
            proxy_send_timeout 90s;
            proxy_read_timeout 90s;
            keepalive_timeout 90;
            limit_req zone=ddos_req burst=4 nodelay;
            limit_conn ddos_conn 8;
        }
    }

    server {
        listen       8011;
        location / {
            return 200 'pong';
            keepalive_timeout 90;
        }
    }
}

和命令:

對於 nginx 容器:

docker run --name nginx_con -d -p 0.0.0.0:8011:8011 -p 0.0.0.0:8010:8010 --restart always -v /Users/mac/docker/conf_files/nginx.conf:/etc/nginx/nginx.conf:ro -v /Users/mac/docker/conf_files/error_log:/var/log/nginx/error_log -v /Users/mac/dcoker/conf_files/access_log:/var/log/nginx/access_log nginx:1.15.8-alpine

對於 api 容器:

sudo docker run --name was_con -d -p 0.0.0.0:8002:8002 --net=host --restart always -e MODE='deploy' -v /Users/mac/docker/conf_files/uwsgi.ini:/uwsgi.ini apiaccount/apiproject:latest

當我從 go 到 url 0.0.0.0:8011 時,它可以工作。 (返回“乒乓”很好)

和我 go 到 url 0.0.0.0:8002 它運作良好

但我 go 到 url 0.0.0.0:8010 它不起作用。

返回 502 錯誤網關。

如何解決?

我在mac OS上運行它..

nginx 在 docker 中找不到 0.0.0.0:8002。 您必須在 Z05B6053C41A2130AFDZFC3BE1 中提供 api 容器的 ip 地址或 dns 名稱所以例如proxy_pass http://was_con:8002 您可以使用docker inspect was_con命令找到 IP

"Networks": {
                "name": {
                    IPAddress": "172.18.0.9"

但是您在主機網絡上運行 api,那么您需要從 docker 看到的主機 IP,默認為 172.17.0.1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM