Chỉnh SSL trên nginx cho storage server nằm trong Docker


(foxdie) #1

Chào các bạn, cho mình hỏi vấn đề này, mình còn đang bơi trên mạng tìm hiểu về VPS, nginx, Docker nên còn rất nhiều thứ chưa rõ.

  • Giờ mình đã có một VPS chạy centos 7 (Vultr) đã cài Nginx (theo HocVPS script). Cấu hình xong SSL đầy đủ cho *.domain.com và domain.com (Let Encrypt). Chạy Wordpress bình thường tại domain.com

  • Sau đó cài thêm một web storage server droppy chạy trên nền docker để test. Đã cài xong Docker và storage server đó, truy cập được tại ip:8989 (8989 là port mặc định của droppy) và dùng ok. Nhưng giờ lại muốn setup SSL và trỏ domain dạng droppy.mydomain.com về ip:port đó

  • subdomain thì chỉnh trên Cloudflare trỏ về ip rồi. Giờ khó là cấu hình nginx (trên host) cho nó giao tiếp với droppy trong Docker.
    vd thử cấu hình
    server {
    listen 8989 ssl;

    access_log off;
    log_not_found off;
    error_log /home/pquan.info/logs/nginx_error.log;

      server_name droppy.mydomain.com;
      
         error_page 497 https://$server_name:$server_port$request_uri;
    

    ssl_certificate /etc/letsencrypt/live/mydomain.com-0001/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/mydomain.info-0001/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;

}

restart nginx nó báo lỗi nginx: [emerg] bind() to 0.0.0.0:8989 failed (98: Address a lready in use)
vì droppy đã chạy nền trước rồi, nếu tắt droppy đi: docker stop droppy
restart nginx lại và start droppy lại thì
Error response from daemon: driver failed programming external connectivity on endpoint droppy: error starting userland proxy: listen tcp 167.179.106.26:8989: bind: address already in use

Tóm lại là ko giao tiếp được từ nginx trên host với docker container.
Trên mạng người ta chỉ hướng dẫn chạy nginx container luôn, nhưng vps đã có nginx nằm ở host rồi.
Nhờ các bạn giúp mình chỗ này với.


(dao_tran) #2

Trong docker bạn cũng phải cài nginx trong đó chiws rồi chạy web trong đó rồi map port đó với một port ở host bên ngoài


(duy) #3

Cho droppy lắng nghe ở 127.0.0.1:8989 còn nginx lắng nghe ở 167.179.106.26:8989 thế thì sẽ hết trùng port (vì khác IP lắng nghe)