LaraDock을 사용하여 Docker Nginx에 SSL 설정을 수행하고 WebSocket에서 ws에서 wss로 액세스 할 수 있도록 설정 한 메모
개요
LaraDock의 Nginx에서 ws의 wss화를 쉽게 할 수 있을 것으로 보인다.
환경
지난번 의 Quoridorn 환경을 계속 사용한다.
소스(클라이언트)
소스(서버)
서버측
nginx 준비
LaraDock 의 nginx Docker 폴더를 사용한다.
Dockerfile 수정
LaraDock은 Laravel용이므로 PHP의 설정이 들어 있다.
이번에는 사용하지 않으므로 지운다.
virtual-environment/provision/docker/nignx/Dockerfile
FROM nginx:alpine
LABEL maintainer="Mahmoud Zalt <[email protected]>"
# // 省略
- # Set upstream conf and remove the default conf
- RUN echo "upstream php-upstream { server ${PHP_UPSTREAM_CONTAINER}:${PHP_UPSTREAM_PORT}; }" > /etc/nginx/conf.d/upstream.conf \
- && rm /etc/nginx/conf.d/default.conf
ADD ./startup.sh /opt/startup.sh
RUN sed -i 's/\r//g' /opt/startup.sh
CMD ["/bin/bash", "/opt/startup.sh"]
EXPOSE 80 443
설정 변경
폴더 내의 config 파일을 다음과 같이 수정한다.
virtual-environment/provision/docker/nginx/sites/default.conf
@@ -1,32 +1,30 @@
+upstream websocket {
+ server node-server:8000;
+}
+
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
# For https
- # listen 443 ssl default_server;
- # listen [::]:443 ssl default_server ipv6only=on;
- # ssl_certificate /etc/nginx/ssl/default.crt;
- # ssl_certificate_key /etc/nginx/ssl/default.key;
+ listen 443 ssl default_server;
+ listen [::]:443 ssl default_server ipv6only=on;
+ ssl_certificate /etc/nginx/ssl/default.crt;
+ ssl_certificate_key /etc/nginx/ssl/default.key;
server_name localhost;
- root /var/www/public;
- index index.php index.html index.htm;
- location / {
- try_files $uri $uri/ /index.php$is_args$args;
+
+ location /socket.io/ {
+ proxy_pass http://websocket;
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "upgrade";
}
- location ~ \.php$ {
- try_files $uri /index.php =404;
- fastcgi_pass php-upstream;
- fastcgi_index index.php;
- fastcgi_buffers 16 16k;
- fastcgi_buffer_size 32k;
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- #fixes timeouts
- fastcgi_read_timeout 600;
- include fastcgi_params;
+ location /socket.io/socket.io.js {
+ proxy_pass http://websocket;
}
location ~ /\.ht {
node-server 컨테이너의 8000번 포트에서 node.js를 움직이고 있으므로,
upstream websocket
라는 이름으로 선언해 그것을 사용.https://domain/socket.io/에서 온 요청을 node.js 쪽에 프록시하여 흘리는 처리를 선언한다.
docker-compose.yml 편집
nginx 추가에 맞게 수정합니다.
virtual-environment/provision/docker/docker-compose.yml
version: "3"
networks:
backend:
driver: ${NETWORKS_DRIVER}
volumes:
mongo:
driver: ${VOLUMES_DRIVER}
services:
### MongoDB ##############################################
# // 省略
node-server:
build: ${QUORIDORN_PATH_ROOT}
volumes:
- ${QUORIDORN_PATH_ROOT}:/app
- /app/node_modules
- ports:
- - "${QUORIDORN_SERVER_PORT}:8000"
command: ["npm", "run", "node-server"]
networks:
- backend
depends_on:
- mongo
+ ### NGINX Server #########################################
+ nginx:
+ build:
+ context: ./nginx
+ args:
+ - CHANGE_SOURCE=${CHANGE_SOURCE}
+ - http_proxy
+ - https_proxy
+ - no_proxy
+ volumes:
+ - ${NGINX_HOST_LOG_PATH}:/var/log/nginx
+ - ${NGINX_SITES_PATH}:/etc/nginx/sites-available
+ - ${NGINX_SSL_PATH}:/etc/nginx/ssl
+ ports:
+ - "${NGINX_HOST_HTTPS_PORT}:443"
+ depends_on:
+ - node-server
+ networks:
+ - backend
원래 공개하고 있던 8000번 포트는, nginx에 의해 wss로 액세스 되는 443으로부터 프록시 되기 때문에, 불필요하게 된다.
환경 변수 추가
virtual-environment/provision/docker/.env
### NGINX #################################################
NGINX_HOST_HTTP_PORT=80
NGINX_HOST_HTTPS_PORT=443
NGINX_HOST_LOG_PATH=./logs/nginx/
NGINX_SITES_PATH=./nginx/sites/
NGINX_SSL_PATH=./nginx/ssl/
### Environment ###########################################
# If you need to change the sources (i.e. to China), set CHANGE_SOURCE to true
CHANGE_SOURCE=false
클라이언트측 설정
ws의 8000 포트로 접속하고 있던 부분을 wss의 443 포트로 바꾼다.
443 포트는 기본이므로 생략 할 수 있습니다.
/public/static/conf/connect.yaml
# 向き先
# quoridornServer: "wss://quori-dev.onlinesession.app"
# quoridornServer: "http://localhost:2222"
-quoridornServer: "ws://192.168.60.79:8000"
+quoridornServer: "wss://192.168.60.79"
동작 확인
vagrant up
에서 docker 자동 시작이 잘못되었습니다. . .가상 환경 시작
※ 서버측과 클라이언트측 모두에서 실시한다.
vagrant up
vagrant ssh
cd virtual-environment/provision/bash
./docker_restart.sh
시작되면 브라우저에서 h tps://192.168.74.60/쿠오도도 rn2/ 에 액세스합니다.
SSL 인증서 문제
테스트를 위해 올레올레 인증서를 사용하고 있기 때문에 클라이언트에서 연결하려고 할 때
ERR_CERT_AUTHORITY_INVALID
오류가 발생하여 연결할 수 없습니다.이 경우 먼저 다음 서버 측 URL을 브라우저에서 엽니 다.
htps // 192. 168. 60. 79 / 소 t. 이오/
고급 설정을 클릭합니다.
192.168.50.79로 이동(안전하지 않음)을 클릭합니다.
안전한 것은 자신이 알고 있다.
아래 화면이 나오면 성공.
클라이언트 화면으로 돌아가서 페이지를 다시로드합니다.
ERR_CERT_AUTHORITY_INVALID
오류가 사라지고 놀이방이 표시되었습니다!참고
laradock
Laradock의 Nginx를 SSL로 변환
WSS가 연결되지 않음
Nginx에서 역방향 프록시를 설정하는 방법
websocket을 사용할 때 놀라운 함정
거친 c 케치. 이오
node.js 초입문 ①node.js로 웹 서버를 만들어 봅니다.
Reference
이 문제에 관하여(LaraDock을 사용하여 Docker Nginx에 SSL 설정을 수행하고 WebSocket에서 ws에서 wss로 액세스 할 수 있도록 설정 한 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hibohiboo/items/24389de4f08eccd6be19텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)