现在的网站支持 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。