Ubuntu 16.04
sudo apt-get install python-certbot-nginx
nginx: [emerg] duplicate listen options for [::]:443 in /etc/nginx/sites-enabled/example.online:29
์ค๋ฅ๊ฐ ์์ด์ผํฉ๋๋ค.
server {
listen 80;
listen [::]:80;
server_name example.online;
root /home/example/deploy;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
server {
listen 80;
listen [::]:80;
server_name www.example.online;
return 301 $scheme://example.online$request_uri;
}
@iamdubx ๋น์ ์ด ์ด๊ฒ์ ์์ ๋์ต๋๊น? ๋๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๊ฐ์ ๋ฌธ์ ... ๋ด ๊ธฐ๋ณธ ์ฌ์ดํธ์์๋ ์๋ํ์ง๋ง ์ฌ์ฉ์ ์ง์ ํ์ ๋๋ฉ์ธ์์๋ ์๋ํ์ง ์์ต๋๋ค.
๋๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๊ทธ๋๋ ์ฌ๋ฌ ๋๋ฉ์ธ์ ์ก๋ ๊ตฌ์ฑ์ด ์์ต๋๋ค.
server {
listen 80;
listen [::]:80;
root /home/primarydomain/public;
index index.html index.htm;
server_name domain1.com *.domain1.com domain2.com *.domain2.com domain3.com *.domain3.com domain4.com *.domain4.com;
return 302 $scheme://primarydomain.com$request_uri;
access_log /var/log/nginx/others.access.log;
error_log /var/log/nginx/others.error.log;
location / {
try_files $uri $uri/ /index.html =404;
}
}
์ด ๊ตฌ์ฑ์ ๋ํด nginx: [emerg] duplicate listen options for [::]:443 in /etc/nginx/sites-enabled/others:19
๋ฅผ ์ป์ต๋๋ค.
์ด์์ฒด์ : Ubuntu 16.04. ๋์์ด ํ์ํ์ธ์?
๊ฐ์ ๋ฌธ์ ์ ๋๋ค.
๋ค์ ๋ช
๋ น์ ์คํํ์ต๋๋ค. certbot --redirect --nginx -d readacted.com -d www.redacted.com
๋ด ์๋ conf ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
server {
server_name redacted.com;
location / {
root /home/redacted/www;
index index.html;
}
}
server {
listen 80;
listen [::]:80;
server_name www.redacted.com;
return 301 $scheme://redacted.com$request_uri;
}
/var/log/letsencrypt/letsencrypt.log์ ๋ฐ๋ฅด๋ฉด certbot์ด ์ด๊ฒ์ ์๋ํ๊ณ ์์์ ์ ์ ์์ต๋๋ค.
server {
server_name redacted.com;
location / {
root /home/redacted/www;
index index.html;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/redacted.com-0001/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/redacted.com-0001/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
listen 80;
listen [::]:80;
server_name www.redacted.com;
return 301 $scheme://redacted.com$request_uri;
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/www.redacted.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/www.redacted.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
nginx๋ listen [::]:443 ssl ipv6only=on; # managed by Certbot
๋ผ์ธ์์ ๋ถํํฉ๋๋ค.
์ค์ ์ค๋ฅ ๋ฉ์์ง :
nginx: [emerg] duplicate listen options for [::]:443 in /etc/nginx/sites-enabled/redacted.com:23
๋น ๋ฅธ Google์ 2010 ๋ ๋ถํฐ์ด ํ์ด์ง๋ฅผ ๊ฐ์ ธ ์์ต๋๋ค.
http://www.serverphorums.com/read.php?5 , 203912
์ด๋ nginx๊ฐ ๋ด๋ถ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ผ๋ก ์ธํด ํผ๋์ค๋ฌ์ ํจ์ ์์ฌํฉ๋๋ค.
์ ๋ nginx ์ ๋ฌธ๊ฐ๋ ์๋์ง๋ง ๋ค์์ด ์๋ํ๋ ๊ฒ์ผ๋ก ํ ์คํธํ์ต๋๋ค.
server {
server_name redacted.com;
location / {
root /home/redacted/www;
index index.html;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/redacted.com-0001/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/redacted.com-0001/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
listen 80;
listen [::]:80;
server_name www.redacted.com;
return 301 http://redacted.com$request_uri;
listen [::]:443; # manually changed
ssl on; #manually changed
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/www.redacted.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/www.redacted.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
์ด ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์ด์์ ์ผ๋ก๋ ๋ ๋์ ์๋ฃจ์ ์ ์ํฉ๋๋ค.
@ohemorange , ์ด๊ฒ์ ์ถ์ ํ๋ ๊ธฐ์กด ๋ฌธ์ ๊ฐ ์๋์ง ์๊ณ ์์ต๋๊น? ์ต์ํ ๋๋์ด ๋ค์ง๋ง ์ด์ ์ ์ดํด๋ณธ ๋ด์ฉ์ธ์ง ์๋์ง๋ ๊ธฐ์ต์ด ๋์ง ์์ต๋๋ค.
๋๋ ์ด๊ฒ์ ๋ณธ ์ ์ด ์๋ค. IPv6๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋ ์๋ ๋ฒ๊ทธ๋ฅผ ์์ ํ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๊ฐ ๋ฐฉ๊ธ IPv6 ์ง์์ ์์ํ๊ธฐ ๋๋ฌธ์ ์ฌ๋๋ค์ด ์ด๊ฒ์ ์น๋ ์ด์ ์ ๋๋ค. ์์ ์๋ฃจ์ ์ด ์๋ํฉ๋๋ค. IPv6 ์ฉ Nginx์์ ์์ง ์์ ๋์ง ์์ ์ด์ ๊ฐ ์๋์ง ํ์ธํ๊ฒ ์ต๋๋ค.
์ค์ ๋ก ssl on
๋ณ๊ฒฝ์ ์ํ ํ ํ์๋ ์์ต๋๋ค. ๋ ์ค ํ๋ ๋๋ ๋ ๋ชจ๋์์ ipv6only=on
๋ฅผ ์ ๊ฑฐํ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๋ค.
@joohoi , ์ฐ๋ฆฌ๋ ipv6only=on
์์ ํ ์ ๊ฑฐํ๊ฑฐ๋ ์ถ๊ฐํ๋ ๊ณ ์ ํ ์ฃผ์ ํ๋น ํ ๋ฒ๋ง ์
๋ ฅํ์ฌ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ถ์ ๊ฒ์
๋๋ค. ์ฌ๊ธฐ์ ๊ฐ์ฅ ์ข์ ๊ฒ์ด ๋ฌด์์ธ์ง ์๊ณ ์์ต๋๊น?
์ฌ๊ธฐ์ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ๋๋ฉ์ธ์์๋ ๋ชจ๋ ๊ฒ์ด ๊ด์ฐฎ ์์ต๋๋ค. ๋ ๋ฒ์งธ ๋๋ฉ์ธ์์ ์ด๋ฌํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ธฐ ์์ํ์ต๋๋ค.
Certbot์ด ์ด๋ค ์ด์ ๋ก ipv6only ์ง์๋ฌธ์ ์์ ํ ๊ฐ์งํ์ง ๋ชปํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๋ฅผ ์ ๊ฑฐํ๋ฉด ๋๋ถ๋ถ ์ ์ฌ์ฉ์์๊ฒ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๋ค. ipv6only์ ๋์๊ณผ ๊ธฐ๋ณธ๊ฐ์ด ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ณ๊ฒฝ ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ์ค์ ๋ก ์ค๋๋ Nginx ๋ฒ์ ์์ ๋ช ๊ฐ์ง ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ต๋๋ค.
๋ถ์พํ ํจ์น์ ๋ํด ์ฌ๊ณผ๋๋ฆฝ๋๋ค. ์ด๋ก ์ธํด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค. ๊ณง ์ ์ ํ ์์ ์ด ์ด๋ฃจ์ด์ง๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
--- /usr/lib/python3/dist-packages/certbot_nginx/configurator.py.orig 2018-02-14 18:38:30.380863045 +0000
+++ /usr/lib/python3/dist-packages/certbot_nginx/configurator.py 2018-02-14 18:38:01.501018553 +0000
@@ -507,10 +507,10 @@ class NginxConfigurator(common.Installer
'[::]:{0}'.format(self.config.tls_sni_01_port),
' ',
'ssl']
- if not ipv6info[1]:
- # ipv6only=on is absent in global config
- ipv6_block.append(' ')
- ipv6_block.append('ipv6only=on')
+ #if not ipv6info[1]:
+ # # ipv6only=on is absent in global config
+ # ipv6_block.append(' ')
+ # ipv6_block.append('ipv6only=on')
if vhost.ipv4_enabled():
ipv4_block = ['\n ',
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.3 LTS
Release: 16.04
Codename: xenial
$ nginx -V
nginx version: nginx/1.10.3 (Ubuntu)
built with OpenSSL 1.0.2g 1 Mar 2016
TLS SNI support enabled
configure arguments: --with-cc-opt='-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_v2_module --with-http_sub_module --with-http_xslt_module --with-stream --with-stream_ssl_module --with-mail --with-mail_ssl_module --with-threads
$ apt show python-certbot-nginx
Package: python-certbot-nginx
Version: 0.21.1-1+ubuntu16.04.1+certbot+1
Priority: optional
Section: oldlibs
Maintainer: Debian Let's Encrypt <[email protected]>
Installed-Size: 9,216 B
Depends: python3-certbot-nginx
Download-Size: 2,470 B
APT-Manual-Installed: yes
APT-Sources: http://ppa.launchpad.net/certbot/certbot/ubuntu xenial/main amd64 Packages
Description: transitional dummy package
This is a transitional dummy package for the migration of certbot
from python2 to python3. It can be safely removed.
๊ฐ์ ๋ฌธ์ . ์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๊น?
ํ ์คํธ ๋ฒฝ์ผ๋ก ์ธํด ๋ฏธ์ํ์ง๋ง ์ฌ๊ธฐ ์์ต๋๋ค.
์ด ๋ฌธ์ ์ ๋ํด ์ค๋ช
ํ๋ ค๋ฉด :
ipv6only ์ต์
์ ์์ผ ๋น ์ฌ๋ฌ ๊ฐ์ ์์ ๋ช
๋ น๋ฌธ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋ถํํ๋ ์์ผ์ ์๋ฒ ๊ตฌ์ฑ์์ ํ ๋ฒ๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ Nginx๊ฐ ์์๋์ง ์์ต๋๋ค.
server {
...
server_name first.example.org;
listen [::]:80 ipv6only=on;
listen 80;
}ย
server {
...
server_name second.example.org;
listen [::]:80 ipv6only=on;
listen 80;
}
์ต์ ๋ฒ์ ์ Nginx์์๋ ๋ณ์์ ๊ธฐ๋ณธ๊ฐ์ด ipv6only=on
์ด๋ฏ๋ก ipv6only
์ค์ ์ ์์ ํ ์๋ตํ๋ฉด์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ค์์ Nginx ๋ฒ์ > = 1.3.4์์ ์ ํจํ๊ณ ์๋ํ๋ ๊ตฌ์ฑ์
๋๋ค.
server {
...
server_name first.example.org;
listen [::]:80;
listen 80;
}
server {
...
server_name second.example.org;
listen [::]:80;
listen 80;
}
๊ทธ๋ฌ๋ 1.3.4 ์ด์ ์ Nginx ๋ฒ์ ์์ ipv6only
๋ณ์์ ๊ธฐ๋ณธ๊ฐ์ ipv6only=off
์ด๋ฏ๋ก ์ด์ ๋ฒ์ ์ ๋ค์ ๊ตฌ์ฑ์์ ์คํจํฉ๋๋ค.
server {
...
server_name first.example.org;
listen [::]:80;
listen 80;
}
ํ์ฌ ๋ฐฐํฌ ํจํค์ง์ ์ํฉ์ ์ด์ ๋ฒ์ ์ Nginx์ ํจ๊ป ์ ๊ณต๋๋ ์ ์ผํ ๋ฐฐํฌํ์ ๊ธฐ๋ณธ ์ ์ฅ์์์ Nginx ๋ฒ์ 1.2.1์ ์ ๊ณตํ๋ Debian Wheezy (Debian 7)๋ฟ์ ๋๋ค.
Certbot์์ ipv6only
ํ์ง ๋ฐ ์ค์ ์ ์์ ํ ์ ๊ฑฐํ๋ฉด Debian Wheezy์ ๋ชจ๋ ์ฌ์ฉ์์๊ฒ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋คํํ Wheezy์ EOL ๋ ์ง๋ 2018 ๋
5 ์๋ก ์ค์ ๋์ด ์์ผ๋ฏ๋ก Certbot ์ฝ๋์์ ์ด๋ฌํ ์ถ๊ฐ ๋ณต์ก์ฑ์ ์์ ํ ์ ๊ฑฐ ํ ์ ์์ต๋๋ค.
Certbot์ ํ์ฌ ๊ธฐ๋ฅ์ ์ ์ฒด Nginx ๊ตฌ์ฑ์ ๊ตฌ๋ฌธ ๋ถ์ํ์ฌ server{}
๋ธ๋ก ์ค ํ๋์ ์ด๋ฏธ์๋ ipv6only=on
์ค์ ์ ๊ฐ์งํ๊ณ ์ถ๊ฐ ํ ๊ฒฝ์ฐ ์๋ตํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ์ ์ฐพ์ง ๋ชปํ ๊ฒฝ์ฐ Certbot์์ด๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์ด ๋ฌธ์ ๋ Certbot์ด ์ฌ์ฉ์ ํ์ฌ ๊ตฌ์ฑ์ ์ผ๋ถ ๋ธ๋ก์์ ์ด๋ฏธ ์กด์ฌํ๋ ๋ณ์๋ฅผ ๊ฐ์ง ํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ตฌ์ฑ์ค์ธ server{}
๋ธ๋ก์ ์ถ๊ฐํ๋ ค๊ณ ํฉ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ์ํ ๊ฒฝ๋ก๋ฅผ ๊ฒฐ์ ํ๋ ค๋ฉด ์์ ํ๊ธฐ๋ก ๊ฒฐ์ ํ ๊ฒฝ์ฐ ์ด๋ฏธ ์กด์ฌํ๋ ipv6only=on
๋ณ์์ ํ์ง๋ฅผ ๊ฐ์ ํ ์ ์๋๋ก ์์์ ์ค๋ช
ํ ๋ฐฉ์์ผ๋ก Certbot์ด ์คํจํ๋ ์ ์ฒด ์์ ๊ตฌ์ฑ์ด ํ์ํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ์์ ํ ์ ๊ฑฐํ๋ ๋์ ๊ทธ๋ ๊ฒํฉ๋๋ค.
ํจ์น ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๊ทธ๊ฒ์ ๋๋ฅผ ์ํด ์ผํ์ต๋๋ค. FWIW, ์ ๋ Ubuntu 17์ ์์ต๋๋ค.
๋๋ ๋ชจ๋ ๊ฒ์ ์ ๊ฑฐํด์ผํ๋ค
listen [::]:80;
listen 80;
์๋ํ๊ฒํ๋ ค๋ฉด
https://github.com/chilion- ๊ฐ์ฌํฉ๋๋ค! ํ์ด:
listen [::]:80;
listen 80;
๋๋ฅผ ์ํด ์ผํ์ต๋๋ค.
ํ๋์ Ubuntu ์๋ฒ์ ๋ ๊ฐ์ ๋๋ฉ์ธ์ด ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ๋ ๋ฌธ์ ๊ฐ๋์ง ์์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๊ทํ์ ์๋ฃจ์ ์ด ์ ์๊ฒ ํจ๊ณผ์ ์ด์์ต๋๋ค. ๋๋ ๋ฐฉ๊ธ ์๋ก์ด ๋ชจ๋ ์๋ฒ์ nginx๋ฅผ ์ค์นํ์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค.
listen [::]:80
์ ๊ฑฐํ์ง๋ง listen 80;
๋จ๊ฒจ๋๋ฉด ๊ธฐ๋ณธ์ด ์๋ ๋๋ฉ์ธ์ ์ค์นํ๋ ๋ฐ ๋์์ด๋์์ต๋๋ค.
ํ์ ๋๋ฉ์ธ ์ค์ ์์ listen [::] : 443 ์ฃผ์์ ๋ฌ๋ฉด ์๋ํฉ๋๋ค. ๊ด์ฐฎ์
๋ฐฉ๊ธ์ด ๋ฌธ์ ์ ๋ถ๋ช ํ์ต๋๋ค. ๋ค๋ฅธ listen
์ง์๋ฌธ ๋ฐ ipv6only
์ ์ดํดํ๋ ค๋ ๋ชจ๋ ๊ธฐ๊ด.
์ด ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ๊ฐ๋ ฅํ ์ถ์ฒํฉ๋๋ค.์ด ๊ธฐ์ฌ๋ฅผ ์ฐพ์ ๋๊น์ง ์น์์ ์ฐพ์ ๋ชจ๋ ๋ค๋ฅธ ์กฐ์ธ์ผ๋ก ๋ฌด์์ํด์ผํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
https://stefanchrist.eu/blog/2015_01_21/Using%20ipv6only%20in%20Nginx.xhtml
๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์์ด ์ธ์ฉ๋ฌธ์ ์ ์๊ฒ ์ ๊ตฌ์ ์๊ฐ์ด์์ต๋๋ค.
๋งค๊ฐ ๋ณ์๋ ์๋ฅผ ๋ค์ด ssl ํ๋๊ทธ์ ๋ค๋ฆ ๋๋ค. ssl ํ๋๊ทธ๋ ์ฌ๋ฌ ์๋ฒ ์ปจํ ์คํธ์์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ์ํ๋๋๋ก ์ผ๊ณ ๋ ์ ์์ต๋๋ค. ipv6only ํ๋๊ทธ๋ ํฌํธ (๋ฐ ์ฃผ์) ๋น ํ ๋ฒ๋ง ์ค์ ํ ์ ์์ต๋๋ค. ๋จ์ผ ์์ ์ง์๋ฌธ my์๋ง ๋งค๊ฐ ๋ณ์๊ฐ ํฌํจ๋์ด ์์ผ๋ฉฐ์ด ํฌํธ๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ์๋ฒ ์ปจํ ์คํธ์ ๋ํด ์ ํจํฉ๋๋ค. ๋ ๋ฒ ์ฌ์ฉํ๋ฉด nginx ๋ฐ๋ชฌ์ด ์์๋์ง ์๊ณ ๋ค์ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ค๋ฅ ๋ก๊ทธ์ ๊ธฐ๋กํฉ๋๋ค.
python ์ ๊ฑฐ ํ ์ฌ์ ํ ์กด์ฌ ํ๋ฉฐ์ด ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค. certbot ์ด๋๊ฐ์ ์ค๋ฅ
์ด ์ค์ ์ฃผ์์ ๋ฌ๋ฉด ์ค๋ฅ๊ฐ ํด๊ฒฐ๋์ง๋ง ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
server {
listen 443 ssl http2;
# listen [::]:443 ssl http2 ipv6only=on;
์ฌ๋ฌ ๋๋ฉ์ธ์ ๊ฒฝ์ฐ
๋์ ์
์ฒญ์ทจ [::] : 443 ssl http2 ipv6only = on;
์ฌ์ฉํ๋ค
์๋ฅผ ๋ค์ด๋ณด์ธ์. com : 443 ssl http2 ipv6only = on;
๋ชจ๋ ์๋ฒ ๋ธ๋ก์์ listen
์ง์๋ฌธ์ ์๋ตํ์ญ์์ค.
์ด ์ค๋ฅ๋ ๋์ผํ ํฌํธ๋ก ๋์ผํ ๋๋ฉ์ธ์์ ์์ ๋๊ธฐํ๋ ๋ ๊ฐ์ ์๋ฒ ๋ธ๋ก์ด์์ ๋ ๋ํ๋ฉ๋๋ค.
์ค๋ณต ๋ฆฌ์ค๋์ ๋ํ ์ฌ์ดํธ ์ฌ์ฉ ๊ฐ๋ฅ ํด๋์ ๋ชจ๋ ๊ตฌ์ฑ ํ์ผ์ ํ์ธํ์ญ์์ค. ์ ๊ฒฝ์ฐ์๋ certbot์ด ๊ธฐ๋ณธ ํ์ผ์์ 443์ ๋ํ ๋ฆฌ์ค๋๋ฅผ ๋ณต์ ํ์ต๋๋ค.
์ต์ ๋ฒ์ ์ Certbot์ผ๋ก์ด๋ฅผ ์ฌํํ๊ธฐ์ํ ๊ตฌ์ฑ ํ์ผ์ ์ ๊ณต ํ ์ ์๋ค๋ฉด๋ณด๊ณ ์ถ์ต๋๋ค.
๋์ค์ ์ธ์ธํ ๊ฒ์์ ํตํด์ด ํฐ์ผ์ ์ฐพ์ ์์๋ ๋ชจํ๊ฐ๋ฅผ ์ํด ๋ค๋ฅธ ๊ณณ์ ipv6only=on
๊ฐ ์์ ๋ ์ ์ด๋ฐ ์ผ์ด ๋ฐ์ํ๋์ง ์ ์ ์์ต๋๋ค.
๊ตฌ์ฑ์ reuseport
์๋ ๊ฒฝ์ฐ ๋์ผํ ์ค๋ฅ / ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ธ์ ํ๊ฒ ์ต๋๋ค, ํผ๋ ์ค๋ฝ์ต๋๋ค. nginx ๋ฌธ์ ์ ๋ฐ๋ฅด๋ฉด listen
๋ํ ์ฌ๋ฌ ๋งค๊ฐ ๋ณ์๊ฐ ์์ง๋ง ipv6only
๋ง "์์์ ํ ๋ฒ๋ง ์ค์ ํ ์ ์์ต๋๋ค."๋ฅผ ์ง์ ํฉ๋๋ค. ์ด ์ค์ด ๋๋จธ์ง ๋งค๊ฐ ๋ณ์์์ ๋๋ฝ ๋์์ต๋๊น? ์์คํ
์ ๋ฐ๋ผ ๋ค๋ฆ
๋ ๊น? ๋๋ ์
์คํธ๋ฆผ์์์ด ๋์์ ์์ ํ๋ ๊ฒ์ด ์ต์ ์ ์กฐ์น ์ผ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๊ธฐ ์์ํ์ต๋๋ค. ์ด์จ๋ ์ด๋ฌํ ์ต์
์ ํ ๋ฒ๋ง ์ค์ ํ๋๋ก ํ์ฉํ๋ ๊ฒ์ ์ด๋ฆฌ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๋๋ ๋ถํํ๋ ๋ฆฌ๋ ์ค ์์ผ์ ๋ํ ์ ๋ฌธ๊ฐ๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ์ต์ ์ด ํ ๋ฒ๋ง ์ค์ ๋ ์์๋ ์ด์ ์ ๋ํด ์ ์ ํ ์๊ฒฌ์ ์ ์ ํ ์ ์์ง๋ง ์ด์ ๊ฐ ์๋ค๊ณ ํ์ ํฉ๋๋ค.
์ด ๊ฒ์๋ฌผ์ด ๋์์ด ๋ ์ ์์ต๋๋ค : https://www.nginx.com/blog/socket-sharding-nginx-release-1-9-1/
๋ด๊ฐ ์๋ ๊ฒ์ ipv6only
์ฒ๋ผ reuseport
๋ ํน์ ํฌํธ ๋น ํ ๋ฒ๋ง ์ค์ ํ ์ ์์ผ๋ฏ๋ก ํ๋์ ๋ฆฌ์ค๋ ๋ง ๊ฐ์ง ์ ์๋ค๋ ๊ฒ์
๋๋ค. ์ ์ด๊ฒ์ด ipv6only
์ ์ฐ์ฐํ ์ถฉ๋ํ๋์ง (๋ ๋์ ๋จ์ด๊ฐ ์๊ธฐ ๋๋ฌธ์), ๋๋ ๋จ์๊ฐ ์์ต๋๋ค.
๊ทธ๋๋ certbot์ ์คํํ๋ ๊ฒ์ด ์ฝ๊ฐ ๋ฌด์ต ํ ๋ ipv6only=on
์ถ๊ฐํ๊ณ ์ถ์ต๋๋ค.
2012 ๋ ์ ์ถ์ ๋ nginx 1.3.4 ์ดํ๋ก ๋ ์ด์ ํ์ํ์ง ์์ผ๋ฉฐ ๊ธฐ์ ์ ์ผ๋ก EOL์ ๋๋ค.
์ต์ํ ๋ฒ์ ํ์ธ์ด ์์ด์ผํ๋ฉฐ ์ถ๊ฐํ๊ธฐ ์ ์ nginx < 1.3.4
๊ฒฝ์ฐ์๋ง ์ถ๊ฐํด์ผํฉ๋๋ค.
Certbot์์๋ ์ค์ ํ์ง ์์ต๋๋ค. ์๋ฒ ๋ธ๋ก์ ๋ง๋ค ๋ ๊ธฐ์กด ๊ธฐ๋ณธ ์๋ฒ ๋ธ๋ก ๋๋ ๋ค๋ฅธ ํ
ํ๋ฆฟ ์๋ฒ ๋ธ๋ก์์ ์ผ๋ถ ์ง์๋ฌธ์ ๋ณต์ฌํฉ๋๋ค. ์ฌ๊ธฐ์๋ ํด๋น ์ต์
๊ณผ ํจ๊ป ์์ ์ง์๋ฌธ์ด ํฌํจ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด Nginx๊ฐ ํ๋ก์ ๋๋ ๋ค๋ฅธ ์ ํ์ ํฌํธ ์ ๋ฌ ๋ค์ ์๋๋ผ๋ Certbot์ด ์๋ํฉ๋๋ค. ์ค๋ณต ๋ ์๋ฒ ๋ธ๋ก์์ ipv6only=on
๋ฅผ ๋ช
์ ์ ์ผ๋ก ์ญ์ ํ๋ ์ด์ ๋ ๋ฌธ์์ ํ ๋ฒ๋ง ์ฌ์ฉํ ์ ์๋ค๊ณ ๋์ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
์ด์์ ์ผ๋ก๋ ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ๋ณต์ ํ ์์๋ ๋ชจ๋ ์ต์ ์ ๋ํด ๋์ผํ ์์ ์ ์ํํ์ง๋ง ์ฌ์ฉ์๊ฐ ๋ชจ๋ ์๋ฒ ๋ธ๋ก์ ํน๋ณํ ์ํ๋ ๋ค๋ฅธ ์ต์ ์ ๊ทธ๋๋ก ๋ก๋๋ค. ๊ทธ๋ฌ๊ธฐ ์ํด์๋ ์ด๋ค ์ต์ ์ด ๋ฐ๋ณต ๊ฐ๋ฅํ์ง, ์ด๋ค ๋ฌธ์๊ฐ ํ์ํ์ง ์๋ ๊ฒ ๊ฐ์ผ๋ฉฐ, ์ด์ ๊ฐ์ ๋ฌธ์ ์ ๋ํด ์ฐ๋ฆฌ์๊ฒ ์ค๋ ์ฌ๋๋ค์ ํตํด์๋ง ๋ฐ๊ฒฌ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ๊ฒ์ ์์์ผํฉ๋๋ค.
๊ฐ์ฌํฉ๋๋ค @joohoi
๊ทํ์ ์ค๋ช
๋ฐ ์๋ฃจ์
์ nginx ๋ฒ์ 1.18.0์ Ubuntu 20์์ ์ ์๊ฒ ํจ๊ณผ์ ์ด์์ต๋๋ค.
2 VPS๊ฐ ์์ต๋๋ค .1์ Ubuntu๊ฐ Nginx 1.10์ ์คํํ๊ณ ๋ค๋ฅธ ํ๋๋ Centos๊ฐ Nginx 1.16์ ์คํ ํ๋ฉฐ์ด ์ค๋ฅ๊ฐ ์์ต๋๋ค. ๊ธฐ๋ฌํ
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๊ฐ์ ๋ฌธ์ ์ ๋๋ค.
๋ค์ ๋ช ๋ น์ ์คํํ์ต๋๋ค.
certbot --redirect --nginx -d readacted.com -d www.redacted.com
๋ด ์๋ conf ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
/var/log/letsencrypt/letsencrypt.log์ ๋ฐ๋ฅด๋ฉด certbot์ด ์ด๊ฒ์ ์๋ํ๊ณ ์์์ ์ ์ ์์ต๋๋ค.
nginx๋
listen [::]:443 ssl ipv6only=on; # managed by Certbot
๋ผ์ธ์์ ๋ถํํฉ๋๋ค.์ค์ ์ค๋ฅ ๋ฉ์์ง :
nginx: [emerg] duplicate listen options for [::]:443 in /etc/nginx/sites-enabled/redacted.com:23
๋น ๋ฅธ Google์ 2010 ๋ ๋ถํฐ์ด ํ์ด์ง๋ฅผ ๊ฐ์ ธ ์์ต๋๋ค.
http://www.serverphorums.com/read.php?5 , 203912
์ด๋ nginx๊ฐ ๋ด๋ถ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ผ๋ก ์ธํด ํผ๋์ค๋ฌ์ ํจ์ ์์ฌํฉ๋๋ค.
์ ๋ nginx ์ ๋ฌธ๊ฐ๋ ์๋์ง๋ง ๋ค์์ด ์๋ํ๋ ๊ฒ์ผ๋ก ํ ์คํธํ์ต๋๋ค.
์ด ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์ด์์ ์ผ๋ก๋ ๋ ๋์ ์๋ฃจ์ ์ ์ํฉ๋๋ค.