2017-09-29 15 views
1

도메인을 사용하여 Docker 용 SSL을 실행하려고합니다. 내 프로젝트에 대해 다음 docker-compose.yml을 사용하고 있습니다 :도메인 용 도커 SSL

web: 
    build: /Users/marcin/docker/definitions/php-nginx/php-7.1-ubuntu 
    volumes: 
    - /c/Users/marcin/docker/projects/newdocker.app/html/:/usr/share/nginx/html/ 
    - /c/Users/marcin/docker/projects/newdocker.app/nginx/conf.d/:/etc/nginx/conf.d/ 
    - /c/Users/marcin/docker/projects/newdocker.app/nginx/log/:/var/log/nginx/  
    - /c/Users/marcin/docker/projects/newdocker.app/php/config/:/usr/local/etc/php/ 
    - /c/Users/marcin/docker/projects/newdocker.app/supervisor/conf.d/:/etc/supervisor/conf.d/ 
    - /c/Users/marcin/docker/projects/newdocker.app/supervisor/log/:/var/log/supervisor/ 
    - /c/Users/marcin/docker/local_share/:/root/.local_share/ 
    working_dir: /usr/share/nginx/html/ 
    links: 
    - db 
    container_name: newdocker.php 
    hostname: newdocker.app 
    ports: 
    - "280:22" 
    - "8300:80" 
    - "18300:443" 
    environment: 
    - VIRTUAL_HOST=newdocker.app 
    - VIRTUAL_PORT=443  
    - VIRTUAL_PROTO=https 
db: 
    build: /Users/marcin/docker/definitions/mysql/5.7 
    environment: 
    - MYSQL_ROOT_PASSWORD=pass 
    - MYSQL_DATABASE= 
    - MYSQL_USER= 
    - MYSQL_PASSWORD= 
    expose: 
    - 3306 
    volumes: 
    - /c/Users/marcin/docker/projects/newdocker.app/mysql/data/:/var/lib/mysql/ 
    - /c/Users/marcin/docker/projects/newdocker.app/mysql/conf.d/:/etc/mysql/conf.d/source 
    - /c/Users/marcin/docker/projects/newdocker.app/mysql/log/:/var/log/mysql/ 
    ports: 
    - "33200:3306" 
    container_name: newdocker.db 
    hostname: newdocker.app 

내가 다음 docker-compose.yml 파일도 jwilder/nginx-proxy을 사용하고 있습니다 :

proxy: 
    image: jwilder/nginx-proxy 
    restart: always 
    volumes: 
    - /var/run/docker.sock:/tmp/docker.sock:ro 
    - ./nginx/conf.d/proxy.conf:/etc/nginx/conf.d/proxy.conf:ro  
    - ./certs/default.crt:/etc/nginx/certs/default.crt:ro 
    - ./certs/default.key:/etc/nginx/certs/default.key:ro  
    ports: 
    - "80:80"  
    - "443:443"  
    container_name: proxy 

그리고 문제는이 같은 수 있습니다 :

http://192.168.99.100:8300/ - is working fine 
https://192.168.99.100:18300/ - is working fine 
https://192.168.99.100/ - I'm getting 503 (this is probably fine - this port is not used for this container) 
http://newdocker.app/ - is working fine 
https://newdocker.app:18300/ - is working fine 
https://newdocker.app/ - I'm getting 500 

내 nginx 설정 파일은 다음과 같습니다.

server { 
    listen  80; 
    listen  443 default ssl; 
    server_name localhost; 

    ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key; 
    ssl_certificate  /etc/ssl/certs/ssl-cert-snakeoil.pem; 
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2; 
    ssl_ciphers   HIGH:!aNULL:!MD5; 

    # set maximum request size to 20M 
    client_max_body_size 20M; 

    root /usr/share/nginx/html/public/; 

    location/{ 
     root /usr/share/nginx/html/public/; 
     index index.php index.html index.htm; 
     try_files $uri $uri/ /index.php?$args; 
    } 

    sendfile off; 

    error_page 500 502 503 504 /50x.html; 
    location = /50x.html { 
     root /usr/share/nginx/html/public/; 
    } 


    location ~ \.php$ { 
     fastcgi_pass 127.0.0.1:9000; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     include  fastcgi_params; 
     fastcgi_param SERVER_NAME $host; 
    } 
} 

포트없이 https://newdocker.app/과 작동하도록 어떻게 설정합니까?

+1

일반적으로 nginx 설정 서버 블록에서 포트 443에서 포트 443을 분리하려면 https로 들어오는 HTTP를 원활하게 보내야합니다.이 동작을 원할 경우 서버 블록을 작성하여 80 만 보내면됩니다. 443 ... 그러면 논리의 대부분이 포트 443의 서버 블록에 상주합니다 ... 그렇지 않습니까? 알고 싶다면 ... 구체적인 예를 게시 할 수 있습니다. 예 URL에 어떤 포트 번호도 포함되어 있지 않습니다. config는 url 경로를 기반으로 기본 서버와 포트로 트래픽을 라우팅합니다. –

+0

@ScottStensland 감사합니다. 당신의 의견을 듣고 있습니다. 모든 유형의 사이트에 동일한 구성표를 사용하고 싶으므로 리디렉션없이 http 및 https를 사용하고 싶습니다. –

+0

nginx 설정에서 https/443으로 모든 것을 리디렉션 했습니까? – Sergiu

답변

0

은 조사 후 내의 nginx 설정 파일이 괜찮다고하지만이처럼 내 docker-composer.yaml를 업데이트했다 :

가장 중요한 것은 (내 인증서를 공유 그것이 작동되도록하려면 여기를 - CERT_NAME=default를 추가했다
web: 
    build: /Users/marcin/docker/definitions/php-nginx/php-7.1-ubuntu 
    volumes: 
    - /c/Users/marcin/docker/projects/newdocker.app/html/:/usr/share/nginx/html/ 
    - /c/Users/marcin/docker/projects/newdocker.app/nginx/conf.d/:/etc/nginx/conf.d/ 
    - /c/Users/marcin/docker/projects/newdocker.app/nginx/log/:/var/log/nginx/  
    - /c/Users/marcin/docker/projects/newdocker.app/php/config/:/usr/local/etc/php/ 
    - /c/Users/marcin/docker/projects/newdocker.app/supervisor/conf.d/:/etc/supervisor/conf.d/ 
    - /c/Users/marcin/docker/projects/newdocker.app/supervisor/log/:/var/log/supervisor/ 
    - /c/Users/marcin/docker/local_share/:/root/.local_share/ 
    working_dir: /usr/share/nginx/html/ 
    links: 
    - db 
    container_name: newdocker.php 
    hostname: newdocker.app 
    ports: 
    - "280:22" 
    - "8300:80" 
    - "18300:443" 
    environment: 
    - VIRTUAL_HOST=newdocker.app 
    - CERT_NAME=default 
    - HTTPS_METHOD=noredirect 

db: 
    build: /Users/marcin/docker/definitions/mysql/5.7 
    environment: 
    - MYSQL_ROOT_PASSWORD=pass 
    - MYSQL_DATABASE= 
    - MYSQL_USER= 
    - MYSQL_PASSWORD= 
    expose: 
    - 3306 
    volumes: 
    - /c/Users/marcin/docker/projects/newdocker.app/mysql/data/:/var/lib/mysql/ 
    - /c/Users/marcin/docker/projects/newdocker.app/mysql/conf.d/:/etc/mysql/conf.d/source 
    - /c/Users/marcin/docker/projects/newdocker.app/mysql/log/:/var/log/mysql/ 
    ports: 
    - "33200:3306" 
    container_name: newdocker.db 
    hostname: newdocker.app 

jwilder/nginx- 프록시는 두 번째 docker-compose.yaml에서 볼 수 있듯이 default.crt와 default.key라는 이름을 가지고 있습니다. http와 https가 모두 작동하기를 원했기 때문에 - HTTPS_METHOD=noredirect도 추가해야했습니다.

이제 nginx를 다시 시작한 후에 어떤 포트도 추가하지 않고 https://newdocker.app을 사용할 수 있으며 http://newdocker.app도 작동합니다.