Docker,Nginx,NodeJ,SSL#3

จะมีราจะมี域名คือkittinut.asiaและCNAME www.kittinut.asiaประมาณนี้แล้วเราเอา

ในขั้นตอนนี้ผมไม่ขอพูดเยอะนะครับเพราะต้องมีสกิลในระดับนึงเเล้ว

访问服务器

ให้ากนั้นให้git pullารรามด้วยรันDocker

  $ cd DockerProject 
DockerProject $ git拉
DockerProject $泊坞窗-d

เราก็จะได้เซิฟเวอร์ที่มีโดเมนของเราเป็นที่เรียบร้อยย

端口80至443

80อนนี้เซิฟเวอร์เราทำงานที่port 80อยู่นั้นเองโดยnginxถูกสั่งมาว่าอย่างนั้นเอาละครับตอนนี้เราจะต้องทำSSLให้ไปอยู่ที่port 443แต่เราต้องทำการขอเลข私钥และ公钥ก่อนซึ่งก่ออ จะขอต้องมี域名ก่อนนะ

แก้ไขารของ่ายมากขั้นแรกแก้ไขdefault.confในDockerProject

 服务器{ 
听80;
server_name kittinut.asia www.kittinut.asia;

#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
位置〜/。众所周知/ acme-挑战{
允许所有;
根目录/ usr / share / nginx / html;
}


位置 / {
根目录/ usr / share / nginx / html;
index index.html index.htm;
}
  location = /50x.html { 
根目录/ usr / share / nginx / html;
}


}

serverากนั้นก็เข้าไปใน服务器ตามด้วยgit pull && docker-compose up -dและพิมพ์คำสั่งตามนี้

 $ sudo docker run -it --rm \ 
-v / root / DockerProject / etc / letsencrypt:/ etc / letsencrypt \
-v / root / DockerProject / var / lib / letsencrypt:/ var / lib / letsencrypt \
-v /root/DockerProject/www/example.com:/data/letsencrypt \
-v“ / root / DockerProject / var / log / letsencrypt:/ var / log / letsencrypt” \
certbot/certbot \
certonly --webroot \
--email knightza94@gmail.com --agree-tos --no-eff-email \
--webroot-path = / data / letsencrypt \
-d kittinut.asia -d www.kittinut.asia

docker certbot domainานขราในการ-01รวจสอบว่า域名ของคุณมีอยู่จริงไหมที่http-01:80นั้นแหละถ้ามีก็จะส่งมาเก็บโดยเรา映射卷หรือmountไว้ใน/ root / DockerProject / etc / letsencrypt
เมื่อทำเสร็จเเล้วจะได้messageแบบนี้ลงบนserver

อัพเดทโครงสร้างโปรเจคบนเซิฟเวอร์

  Docker项目 
|-等
| -letsencrypt
| -live //เราสนใจอันนี้
| -kittinut.asia
| -fullchain.pem
| -privkey.pem
| -nginx
| -default.conf
| -www
| -example.com
| -index.html
|-docker-compose.yml

ตอนนี้โปรเจคเราเริ่มจะเยอะขึ้นเเล้วนะครับ

docker-compose.ymlใหม่ดังนี้นะคับเอาหล่ะครับมาถึงขั้นนี้เราจะทำการแก้ไข

  版本: “ 3.1” 
服务:
nginx:
图片: nginx:1.13.12-alpine
container_name: nginx
端口:
-“ 80:80”
-“ 443:443” //เปิด端口443
数量:
-./nginx/:/etc/nginx/conf.d/
-./www/example.com/:/usr/share/nginx/html
-./etc/letsencrypt/live/kittinut.asia/fullchain.pem:/etc/letsencrypt/live/kittinut.asia/fullchain.pem
-./etc/letsencrypt/live/kittinut.asia/privkey.pem:/etc/letsencrypt/live/kittinut.asia/privkey.pem
-./etc/letsencrypt/dh-param/dhparam-2048.pem:/etc/ssl/certs/dhparam-2048.pem

ทำไมผมถึงนบรรทัดข้างบนทุกท่านอาจจะงงว่าทำไมผมถึง映射的卷

และdefault.confจะต้องเพิ่มดังนี้แล้วpushขึ้นgithub

 服务器{ 
听80;
听[::]:80;
server_name kittinut.com www.kittinut.asia;

位置^〜/。众所周知/ acme-挑战{
根目录/ usr / share / nginx / html;
default_type文本/纯文本;
允许所有;
}

位置 / {
重写^ https:// $ host $ request_uri? 常驻;
}
}

#https://kittinut.asia
服务器{
监听443 SSL http2;
听[::]:443 SSL http2;
server_name kittinut.asia;

server_tokens关闭;

ssl_certificate /etc/letsencrypt/live/kittinut.asia/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/kittinut.asia/privkey.pem;

ssl_buffer_size 8k;

ssl_dhparam /etc/ssl/certs/dhparam-2048.pem;

ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_prefer_server_ciphers;

ssl_ciphers ECDH + AESGCM:ECDH + AES256:ECDH + AES128:DH + 3DES:!ADH:!AECDH:!MD5;

ssl_ecdh_curve secp384r1;
ssl_session_tickets关闭;

#OCSP装订
ssl_stapling on;
ssl_stapling_verify on;
解析器8.8.8.8;

位置^〜/。众所周知/ acme-挑战{
根目录/ usr / share / nginx / html;
default_type文本/纯文本;
允许所有;
}

返回301 https://www.kittinut.asia$request_uri;
}

#https://www.kittinut.asia
服务器{
server_name www.kittinut.asia;
监听443 SSL http2;
听[::]:443 SSL http2;

server_tokens关闭;

ssl on;

ssl_buffer_size 8k;
ssl_dhparam /etc/ssl/certs/dhparam-2048.pem;

ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_prefer_server_ciphers;
ssl_ciphers ECDH + AESGCM:ECDH + AES256:ECDH + AES128:DH + 3DES:!ADH:!AECDH:!MD5;

ssl_ecdh_curve secp384r1;
ssl_session_tickets关闭;

#OCSP装订
ssl_stapling on;
ssl_stapling_verify on;
解析器8.8.8.8 8.8.4.4;

ssl_certificate /etc/letsencrypt/live/kittinut.asia/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/kittinut.asia/privkey.pem;

位置^〜/。众所周知/ acme-挑战{
根目录/ usr / share / nginx / html;
default_type文本/纯文本;
允许所有;
}

根目录/ usr / share / nginx / html;
索引index.html;
}

อนที่เราจะpull githubลงมาเราต้องทำการสร้าง2048位DH Param文件บนเซิฟเวอร์เรา

  $ sudo openssl dhparam -out /root/DockerProject/etc/ letsencrypt / dh-param / dhparam-2048.pem  2048 

generation生成2048位DH参数文件ำนm default.confและdocker-compose.ymlที่เมื่อกี้pullลงมากี้ากนั้นใช้คำสั่ง

  $ docker-compose up -d 
$ docker ps //เพื่อตรวจสอบว่าnginxเราทำงานปกติไหม

เอาหล่ะครับตอนนี้ถ้าไม่เข้าใจให้ย้อนกลับไปไหมหรือทักมาถามผมก็ได้นะอิอิ

ทำการทดสอบ浏览器

ังkittinut.asiaมันจะถูก重定向。ยังhttps://kittinut.asiaตามคำสั่งที่อยู่ในdefault.confจะถูกรรทัดที่เขียนว่า

 位置 / { 
重写^ https:// $ host $ request_uri? 常驻;
}
  และ 
 返回301 https://www.kittinut.asia$request_uri; 

ลองไปดูกันนะครับ

บอบSSL

labราจะทำการทดสอบผ่านทางSSL实验室และผลที่ได้คือ

ตีบวกSSL

 //default.conf 
#https://www.kittinut.asia
server {
# ....

location / {
#security headers
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "DENY" always;
#CSP
add_header Content-Security-Policy "frame-src 'self'; default-src 'self'; script-src 'self' 'unsafe-inline' https://maxcdn.bootstrapcdn.com https://ajax.googleapis.com; img-src 'self'; style-src 'self' https://maxcdn.bootstrapcdn.com; font-src 'self' data: https://maxcdn.bootstrapcdn.com; form-action 'self'; upgrade-insecure-requests;" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
}

# ....
}

serverอนนี้จะเป็นการเพิ่มการป้องกันอีกชั้นนึงให้กับเว็ปไซด์ของเราและทำการนำขึ้น服务器พร้อมกับรันdocker-compose up -dอีกครั้งและนำไปทดสอบ

ถึงตอนสรุปผล

SSL SSL docker nginx错误(错误)错误代码错误代码错误消息错误代码错误消息错误消息错误消息.conf nginxที่ต้องมีประสบการณ์แต่เราสามารถหาได้ในเว็ปไซด์อยู่แล้ว

参考:

DOCKER#5(Nginx /让我们加密/HTTP2.0)
支援MySQL,PhpFPM,Nginx,SSL支援Linux Debian 8.6 x64 Digital Ocean Host支援docker 1.12.6 build 78d1802 werapun.com 如何使用Docker和Nginx从Let’s Encrypt中设置免费的SSL证书
我一直在使用来自Let’s Encrypt的免费SSL / TLS证书大约18个月。 最近,我开始结合Docker… www.humankode.com

js nodejsบนเราสร้างนี้

หากผิดพลาดประการใดต้องขออภัยมาที่นี้ด้วยและหากมีข้อสงสัยสามารถติดต่อได้จ้า

Docker,Nginx,NodeJ,SSL#4
กาผมได้ส第3章ทำSSL,让我们加密jsนะครับในบทสุดท้ายนี้ผมจะสอนให้ทำเกี่ยวกับNodejs medium.com