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
因为是自签证书,所以在互联网上是不受信任的!
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)
}
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中break
与last
$ 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
last与break对比总结:
- last会新建立一个请求,请求域名+/test
- break匹配后不会进行匹配,会查找对应root站点目录下包含/test目录;
对比flag中redirect
与permanent
$ 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服务,再次进行测试!
测试nginx中permanent:
停止nginx服务,再次进行测试!
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;
}