现在的网站支持 HTTPS 几乎是标配功能,Nginx 能很好的支持 HTTPS 功能。下面列举一个 Nginx 配置,该配置同时支持 HTTP 和 HTTPS 功能。
注意:既然选择使用 HTTPS,就是为了保证通信安全,那么就没必要再用 HTTP 进行通信了。在 URL 中还支持 HTTP 的方式,主要是为了用户不知道网站支持 HTTPS,还是使用 HTTP 的方式进行访问。这时 Nginx 后台需要自动将 HTTP 请求转成 HTTPS 的方式,这样就又能支持 HTTP,又能保证通信安全了。
Nginx 配置如下:
http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /usr/local/nginx/logs/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /usr/local/nginx/conf/mime.types; default_type application/octet-stream; #... server { listen 80; server_name domain_name; rewrite ^/(.*) https://$server_name$request_uri? permanent; } server { # 配置 HTTPS 的默认访问端口号为 443。 # 此处如果未配置 HTTPS 的默认访问端口,可能会造成 Nginx 无法启动。 # Nginx 1.15.0 以上版本请使用 listen 443 ssl 代替 listen 443 和 ssl on。 listen 443 ssl; server_name domain_name; charset utf-8; # 证书的文件名称 ssl_certificate cert/domain_name.pem; # 证书的密钥文件名称 ssl_certificate_key cert/domain_name.key; ssl_session_timeout 5m; # 使用此加密套件 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; # 使用该协议进行配置 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; # ... } # ... }
注意:上面的 cert 目录位于 $NGINX_HOME/conf/cert,因此证书路径为 $NGINX_HOME/cert/domain_name.pem 和 $NGINX_HOME/cert/domain_name.key。