nginx
nginx是一套网页服务器,在效能与设定弹性上取得不错的平衡点。
安装
在Ubuntu上除了内建版本外(在16.04上内建的是1.10.3),另外官方也有维护PPA可以安装(版本较新):
有nginx-light
(basic version)、nginx-full
(standard version)、nginx-extras
(extended version)可以安装,一般装nginx-full
算是够用。
设定
Log
我希望记录使用者在HTTPS环境下用的TLS Protocol与Cipher,所以将这两个资讯放到Log内。
在/etc/nginx/conf.d/combined_ssl.conf
内的设定如下:
# log_format combined_ssl '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $ssl_protocol/$ssl_cipher';
SSL
在/etc/nginx/conf.d/ssl.conf
内的设定如下:
ssl_protocols TLSv1 TLSv1.2; ssl_ciphers "CHACHA20+ECDHE:AESGCM+ECDHE:AES+ECDHE:CAMELLIA+ECDHE:!ADH:!AECDH:!DSS:!ECDSA:!MD5:!SHA1"; ssl_session_cache shared:SSL:30m; ssl_session_timeout 30m;
这跟其他网站上建议的有些差异:
- 直接关掉
TLSv1.1
: - 因为就浏览器安全性来说,应该使用
TLSv1.2
,就相容性来说,则是使用TLSv1.0
,而目前没有看到需要开TLSv1.1
才会动情况,直接关掉反而可以避免nginx实做TLSv1.1
有问题时的风险(因为用的人少,眼球会比较少,这个协定风险反而比另外两个高)。 - 试着支援非NIST架构的协定:
- 目前cipher都是NIST所选出的协定,所以还是多选了ChaCha20与Camellia让使用者可以用。
范例
这边是/etc/nginx/sites-available/default
的内容,配合Dehydrated的需求:
#
server {
listen 80 default_server;
listen [::]:80 default_server;
root /srv/www/public;
index index.html;
server_name _;
location /.well-known/acme-challenge/ {
alias /var/www/dehydrated/;
}
}
快速安装
sudo apt install nginx-full; echo -e "#\nserver {\n listen 80 default_server;\n listen [::]:80 default_server;\n root /srv/www/public;\n index index.html;\n server_name _;\n location /.well-known/acme-challenge/ {\n alias /var/www/dehydrated/;\n }\n}" | sudo tee /etc/nginx/sites-available/default
外部链接
- 官方网站 (英文)
- NGINX Stable : “Nginx” team (英文)
- NGINX Mainline : “Nginx” team (英文)