Nginx笔记 - https配置

190 阅读2分钟

自己生成CA证书签发。

参考文章

www.nginx.cn/5804.html
blog.csdn.net/weixin_3588…

检查环境

  • openssl环境
> openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017
  • nginx环境
> nginx -V

如果出现 configure arguments: –with-http_ssl_module, 则已安装

生成CA证书

/etc/nginx/目录下,新建一个专门存放https证书的目录

> mkdir ssl_key
  • 创建服务器私钥 生成过程当中需要输入一个生成key的校验密码,后续使用这个文件的时候需要校验密码
> openssl genrsa -idea -out jesonc.key 1024
  • 创建签名请求证书CSR文件 通过刚才生成的签名key文件,生成csr文件,生成csr文件的过程当中,也需要输入一个密码和一堆证书签名相关的信息,按照实际情况填写即可,后续的管理、维护和升级的时候也都需要验证此密码
> openssl req -new -key jesonc.key -out jesonc.csr
  • 标记证书须使用上述的私钥和签名文件 在生成签名证书的过程中,需要输入和校验在生成key的时候的密码进行校验 -days参数是签名的有效期,默认一个月,建议自己设置签名证书的过期时间,-days 3650等于设置证书有效期10年
> openssl x509 -req -days 3650 -in jesonc.csr -signkey jesonc.key -out jesonc.crt

此时,ssl_key 目录下的文件

> jesonc.crt  jesonc.csr  jesonc.key

语法配置

文档示例:

server {
    listen              443 ssl;
    server_name         www.example.com;
    ssl_certificate     www.example.com.crt; # crt文件的位置
    ssl_certificate_key www.example.com.key; # key文件的位置
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    ...
}

配置示例:

server 
 {
    listen	443 ssl;
    server_name domain.com localhost;
    ssl_certificate  /etc/nginx/ssl_key/jesonc.crt;
    ssl_certificate_key  /etc/nginx/ssl_key/jesonc.key;

    index  	index.html index.htm;
    location  /  {
	root  /opt/app/code;	
    }   
 }

配置http转发到https

参考文章:cloud.tencent.com/developer/a…

  • rewrite方法
server {
    listen 80;
    server_name domain.com;
    rewrite ^(.*) https://$server_name$1 permanent;
}
server {
    listen 443 ssl;
    server_name domain.com;
    ssl on;
    ssl_certificate     /etc/nginx/ssl/domain.com.crt;
    ssl_certificate_key /etc/nginx/ssl/domain.com.crt;
    # other
}
  • 使用return
server {
    listen 80;
    server_name domain.com;
    return 301 https://$server_name$request_uri;
}
server {
    listen 443 ssl;
    server_name domain.com;
    ssl on;
    ssl_certificate     /etc/nginx/ssl/domain.com.crt;
    ssl_certificate_key /etc/nginx/ssl/domain.com.crt;
    # other
}
  • 使用error_page 只允许HTTP来访问时,用HTTP访问会让Nginx报497错误,然后利用error_page将链接重定向至HTTPS上。
server {
    listen 80;
    listen 443 ssl;
    server_name domain.com;
    ssl on;
    ssl_certificate     /etc/nginx/ssl/domain.com.crt; 
    ssl_certificate_key /etc/nginx/ssl/domain.com.crt;
    # other
    error_page 497 https://$server_name$request_uri;
}

使用error_page指令时,将http和https的监听配置写在同一个server块中,对应的其他配置也需要在该server配置块中完成。 需要注意的是,此时需要将error_page指令语句写在最后,否则不能生效。