Nginx配置SSL证书
前提条件
- 服务器已开启了443端口(HTTPS服务的默认端口)。
- 服务器上已安装了http_ssl_module模块(启用SSL功能)。
操作步骤
- 我们下载的证书文件中有一个Nginx的文件夹,这里面的两个文件都是需要的。解压后的文件夹中有2个文件:
- 证书文件:以.pem为后缀或文件类型。
- 密钥文件:以.key为后缀或文件类型。
我们需要把这个两个文件上传到 linux 服务器中,在Nginx安装目录(默认Nginx安装目录为/usr/local/nginx/conf)下创建cert目录,并将下载的证书文件和密钥文件拷贝到cert目录中。
修改Nginx安装目录/conf/nginx.conf文件。 找到以下配置信息:
# HTTPS server server { listen 443; server_name localhost; ssl on; ssl_certificate cert.pem; ssl_certificate_key cert.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; ssl_prefer_server_ciphers on; location / {
按照下文中注释内容修改nginx.conf文件:
# 以下属性中以ssl开头的属性代表与证书配置有关,其他属性请根据自己的需要进行配置。 server { listen 443 ssl; #SSL协议访问端口号为443。此处如未添加ssl,可能会造成Nginx无法启动。 server_name localhost; #将localhost修改为您证书绑定的域名,例如:www.example.com。 root html; index index.html index.htm; ssl_certificate cert/domain name.pem; #将domain name.pem替换成您证书的文件名。 ssl_certificate_key cert/domain name.key; #将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; location / { root html; #站点目录。 index index.html index.htm; } }
保存nginx.conf文件后退出。
执行以下命令重启Nginx服务器。
nginx -s stop nginx -s start
说明 如果重启Nginx出现报错“the "ssl" parameter requires ngx_http_ssl_module”,您需要重新编译Nginx并在编译安装的时候加上--with-http_ssl_module配置。
设置HTTP请求自动跳转HTTPS。 在需要跳转的HTTP站点下添加以下rewrite语句,实现HTTP访问自动跳转到HTTPS页面。
server { listen 80; server_name localhost; #将localhost修改为您证书绑定的域名,例如:www.example.com。 rewrite ^(.*)$ https://$host$1 permanent; #将所有http请求通过rewrite重定向到https。 location / { index index.html index.htm; } }
后续操作
证书安装完成后,可通过登录证书的绑定域名验证该证书是否安装成功。
https://domain name #domain name替换成证书绑定的域名。
如果网页地址栏出现小锁标志,表示证书安装成功。
全部参数
server{ listen 443; server_name example.com www.example.com; root /Users/welefen/Develop/git/firekylin/www; set $node_port 8360; ssl on; ssl_certificate %path/ssl/chained.pem; ssl_certificate_key %path/ssl/domain.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA; ssl_session_cache shared:SSL:50m; ssl_dhparam %path/ssl/dhparams.pem; ssl_prefer_server_ciphers on; index index.js index.html index.htm; location ^~ /.well-known/acme-challenge/ { alias %path/ssl/challenges/; try_files $uri = 404; } location / { proxy_http_version 1.1; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_pass http://127.0.0.1:$node_port$request_uri; proxy_redirect off; } location = /development.js { deny all; } location = /testing.js { deny all; } location = /production.js { deny all; } location ~ /static/ { etag on; expires max; } } server { listen 80; server_name example.com www.example.com; rewrite ^(.*) https://example.com$1 permanent; }
Comments