nginx https配置

nginx https配置

1. HTTPS基本概述

为什么使用HTTPS,因为HTTP不安全!

1.传输数据被中间人盗用,信息泄露;
2.数据内容劫持、篡改;

2. HTTPS配置语法

Syntax:	ssl	on | off;
Default: ssl off;
Context: http, server
Syntax:	ssl_certificate	file;
Default: —
Context: http,	server
Syntax:	ssl_certificate_key	file;
Default: —
Context: http, server

3. HTTPS配置场景

3.1 检查当前环境

$ openssl version     # 版本必须是1.0.2或以上版本
OpenSSL 1.0.2k-fips  26 Jan 2017
$ mkdir -p /etc/nginx/ssl_key && cd /etc/nginx/ssl_key

3.2 创建私钥

$ openssl genrsa -idea -out server.key 2048
# 回车之后输入密码,密码谨记,后续会用到

3.3 生成使用签名请求证书和私钥生成自签证书

$ openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt

3.4 配置nginx

$ vim /etc/nginx/conf.d/ssl.conf
server {
    listen 443;
    server_name 192.168.1.1;
    ssl on;
    index index.html index.htm;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
    ssl_certificate     ssl_key/server.crt;
    ssl_certificate_key ssl_key/server.key;
    ssl_session_cache   shared:SSL:10m;
    ssl_session_timeout 10m;

    location / {
        root /soft/code;
        access_log /var/log/nginx/ssl.log main;
    }
}
$ nginx -t
$ systemctl restart nginx

nginx https配置
因为是自签证书,所以在互联网上是不受信任的!

3.5 配置Nginx强制跳转https

$ vim /etc/nginx/conf.d/ssl.conf
# 在原本的基础上添加以下内容
server {
    listen 80;
    server_name 192.168.1.1;
    rewrite ^(.*) https://$server_name$1 redirect;        # 临时重定向(302)
    # rewrite ^(.*) https://$server_name$1 permanent;     # 永久重定向(301)
}

nginx https配置

4. Nginx Rewrite

4.1 Rewrite基本概述

rewrite主要实现url地址重写以及重定向!

Rewrite使用场景

  • URL访问跳转:支持开发设计、页面 跳转、兼容性支持、展示效果;
  • SEO优化:依赖URL路径,以便支持搜索引擎录入;
  • 维护:后台维护,流量转发等;
  • 安全:伪静态、真实动态页面进行伪装;

4.2 Rewrite配置语法

Syntax: rewrite	regex replacement [flag];
Default: --
Context: server, location, if
//所有请求转发至/pages/maintain.html
rewrite	^(.*)$	/pages/maintain.html break;

正则表达式

表达式符号 含义
. 匹配除换行符以外的任意字符
重复0次或1次
+ 重复1次或更多次
* 最少连接数,那个机器连接数少就分发
\d 匹配数字
^ 匹配字符串的开始
$ 匹配字符串的结尾
{n} 重复n次
{n,} 重复n次或更多次
[c] 匹配单个字符c
[a-z] 匹配a-z小写字母的任意一个

正则表达式中特殊字符

\\	转义字符
rewrite	index\.php$	/pages/maintain.html break;
\\ ()用于匹配括号之间的内容,	通过$1,$2调用
if	($http_user_agent ~ Chrome){
	rewrite	^(.*)$ /chrome/$1 break;
}

4.3 Rewrite标记Flag

flag
last 停止rewrite检测
break 停止rewrite检测
redirect 返回302临时重定向,地址栏会显示跳转后的地址
permanent 返回301永久重定向,地址栏会显示跳转后的地址

对比flag中breaklast

$ vim /etc/nginx/conf.d/rewrite.conf
server {
    listen 80;
    server_name 192.168.1.1;
    root /soft/code;

    location ~^/break {
        rewrite ^/break /test/ break;
    }

    location ~^/last {
        rewrite ^/last /test/ last;
    }

    location /test/ {
        default_type application/json;
        return 200 ‘{"status":"success"}‘;
    }
}
$ nginx -t
$ systemtl restart nginx

nginx https配置
nginx https配置

last与break对比总结:

  • last会新建立一个请求,请求域名+/test
  • break匹配后不会进行匹配,会查找对应root站点目录下包含/test目录;

对比flag中redirectpermanent

$ vim /etc/nginx/conf.d/rewrite.conf
server {
    listen 80;
    server_name 192.168.1.1;
    root /soft/code;

    location ~^/lzj {
        rewrite ^/lzj https://lvzhenjiang.gitee.io redirect;
#       rewrite ^/lzj https://lvzhenjiang.gitee.io permanent;

    }
}

测试nginx中redirect
nginx https配置
停止nginx服务,再次进行测试!
nginx https配置

测试nginx中permanent
nginx https配置
停止nginx服务,再次进行测试!
nginx https配置

4.4 Rewrite使用场景

第一种使用场景

$ ls /soft/code/course/11/22/course_33.html

location / {
rewrite	^/course-(\d+)-(\d+)-(\d+)\.html /course/$1/$2/course_$3.html break;
	}

第二种使用场景

if	($http_user_agent ~* Chrome){
	rewrite	^/nginx	https://lvzhenjiang.gitee.io/index.html	redirect;
	}

5. Rewrite额外补充

Rewrite匹配优先级

  • 执行server块的rewrite指令;
  • 执行location匹配;
  • 执行选定的location中rewrite

Rewrite优雅书写

server	{
	listen	80;
	server_name	www.bgx.com	bgx.com;
	if	($http_host = nginx.org){
	rewrite	(.*) http://www.bgx.com$1;
	}
}
//改良版
server	{
	listen	80;
	server_name	bgx.com;
	rewrite	^ http://www.bgx.com$request_uri?;
	}
server	{
	listen	80;
	server_name	www.bgx.com;
}

nginx https配置

上一篇:NReco.PdfGenerator HtmlToPdfConverter 使用示例(未完成)


下一篇:Rollup.js: 开源JS库的打包利器