server {
listen 80;
listen 443 ssl http2;
server_name
www.your-domain.com your-domain.com;
index index.php index.html;
root /data/wwwroot/web;
ssl_certificate /path/to/your-domain.crt;
ssl_certificate_key /path/to/your-domain.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #允许的协议
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; #加密算法(CloudFlare 推荐的加密套件组)
ssl_prefer_server_ciphers on; #优化 SSL 加密套件
ssl_session_timeout 10m; #客户端会话缓存时间
ssl_session_cache builtin:1000 shared:SSL:10m; #SSL 会话缓存类型和大小
ssl_buffer_size 1400; # 1400 bytes to fit in one MTU
#add_header X-Frame-Options SAMEORIGIN; #拒绝被嵌入框架(iframe …)
#add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"; #强制 SSL(包含子域名),并加入 hsts 列表
add_header X-UA-Compatible "IE=edge,chrome=1"; #IE 用最新内核渲染页面
if ($host != '
www.your-domain.com' ) { return 301
https://www.your-domain.com$request_uri; } #把根域名 301 到 www 开头的域名
if ($ssl_protocol = "") { return 301 https://$host$request_uri; } #如果非 ssl 就 301 到 https
access_log /data/wwwlogs/your-domain.com_nginx.log combined;
#error_page 404 /404.html;
if ( $query_string ~* ".*[\;'\<\>].*" ){
return 404;
}
location ~ [^/]\.php(/|$) {
fastcgi_pass unix:/dev/shm/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|js|css|ico)$ {
expires 30d;
}
}
chrome 51 以上要使用 openssl 1.0.2 来编译才支持 ALPN 来协商 HTTP2 ,
可以使用 openssl 1.1.0 版本(目前是测试版) ,或者 LibreSSL 来支持 chacha20 加密套件
nginx 可以参考上面的这样配置, 80 和 443 端口不用分开两次写。