- 零、前置内容:
- 一、普通linux环境
- 0、本文的环境预设
- 1、通用的基础反向代理
- (1)基本转发
- (2)基础SSL证书
- (3)基本即用(懒中懒)
- 二、Docker 环境
- 三、其他拓展
- 1、关于SSL证书
- ①检查OpenSSL(自生成CA证书问题)
- ②csr、crt、key的问题
- (1)生成csr方式:
- (2)签名csr
- 2、nginx中常用内置参数
- 3、自定义access/error日志格式
- ①日志格式:main(default)
- ②自定义格式
- ③使用内置参数格式的日志
- 4、开启压缩(压缩大文件内容)
- 5、开启缓存策略
- 通用配置:
- 缓存时间参数:
- 6、 location匹配规则
- 啥都不加[大小写敏感] [前缀匹配]
- ①精确匹配(=)
- ②正则匹配 (~)[大小写敏感]
- ③忽略大小写的正则(~*)
- ④前缀匹配(^~) [中了不会继续往后匹配]
- ⑤内部跳转(@)[当错误页面处理就好]
一堆资料发现还是需要钻研才回去细读,想了下还是懒狗式指引适合自己。
总体来说,以实际使用出发,主要针对http与server层进行配置
一、普通linux环境 0、本文的环境预设1、通用的基础反向代理(1)域名预设:www.coffeeandice.cn
(2)内网ip预设:192.168.1.111
(3)应用预设:
—①端口:8080
—②内网访问应用端点前缀:192.168.1.111:8080/demoApplication
(4)http 部分内容采用默认属性
(5)SSL证书:
—①key: /var/ssl/demo.key
— ②crt:/var/ssl/demo.crt
(1)基本转发最基本的反向代理方式
server {
listen 80;
server_name 192.168.1.111;
#定义编码,转换编码格式。大多数现代浏览器支持(意味着别玩古老的)
charset utf-8;
#通常是有需要将不同server分层设置日志,设置为全局日志
#access_log logs/host.access.log;
#error_log logs/host.error.log;
location /api/{
#也有设置分层日志,便于仔细查看内容(以最靠近配置的为生效配置)
#access_log logs/api/host.access.log;
#error_log logs/api/host.error.log;
proxy_pass http://localhost:8080/api/;
}
}
(2)基础SSL证书
使用预设环境中的域名:www.coffeeandice.cn
使用预设环境中的证书/密钥:demo.crt/demo.key
server {
listen 80;
#1.15version above
listen 443 ssl;
# 1.15version before
# ssl on;
server_name www.coffeeandice.cn;
ssl_certificate /var/ssl/demo.crt;
ssl_certificate_key /var/ssl/demo.key;
#定义编码,转换编码格式。大多数现代浏览器支持(意味着别玩古老的)
charset utf-8;
location /api/{
proxy_pass http://localhost:8080/api/;
}
}
(3)基本即用(懒中懒)
通常满足的配置
server {
listen 80;
#1.15version above
listen 443 ssl;
# 1.15version before
# ssl on;
server_name www.coffeeandice.cn;
ssl_certificate /var/ssl/demo.crt;
ssl_certificate_key /var/ssl/demo.key;
#定义编码,转换编码格式。大多数现代浏览器支持(意味着别玩古老的)
charset utf-8;
#后端服务器数据回传时间,默认为秒
#proxy_send_timeout 100
#服务器处理请求的时间,默认为秒
#proxy_read_timeout 100
#服务器响应超时的时间,默认为秒
proxy_connect_timeout 100
#压缩部分
#设置仅有http1.1以上使用,因为之前本来就不支持
gzip_http_version 1.1;
#压缩等级,通常1~9,采用6即可
gzip_comp_level 6;
#达到甚么值才开始压缩,建议大点避免全压缩
gzip_min_length 400k;
#压缩类型:json,text,js,css,xml
gzip_types application/json application/text application/javascript text/css text/xml;
#缓存部分
#在 HTTP/1.1 中用 Cache-Control 管理缓存
#Pragma 对于 HTTP/1.0 客户端的向后兼容性
add_header Cache-Control public;
add_header Pragma public;
#基于更新频率,让客户读取内存中的缓存以减少请求数据
expires 1d;
location /api/{
#日志若非实时:可以如下,满24k 或每5秒刷新一次,减少刷盘速度
#access_log logs/api/host.access.log buffer = 24k flush =5s
access_log logs/api/host.access.log;
error_log logs/api/host.error.log;
proxy_pass http://localhost:8080/api/;
}
}
二、Docker 环境
三、其他拓展
1、关于SSL证书
①检查OpenSSL(自生成CA证书问题)整体来说,我们用到的都是X509证书。在https请求中总能有是否设置验证校验证书的问题,主要都是针对X509证书
②csr、crt、key的问题**非懒狗注意:**OpenSSL,如果版本低于1.0.1f,存在Heartbleed问题
检查版本讯息:openssl version yum版本更新: yum update openssl
通常流程: 提供csr交予客户生成crt
(1)生成csr方式:自己申请csr -> 保存密钥
|
提供给客户 csr
|
客户CA签名 -> crt
(2)签名csr懒狗必定不会自己生成:(记得保存密钥)
CSR在线生成工具 (myssl.com)
2、nginx中常用内置参数对客户csr签名,然后生成crt证书
腾讯云: https://cloud.tencent.com/document/product/400/47283
阿里云:aliyun.com
| 参数 | 说明 | 示例 |
|---|---|---|
| $remote_addr | 客户端地址 | |
| $remote_user | 客户端用户名称 | |
| $remote_port | 客户端的端口 | |
| $request | 请求的URI和HTTP协议 | “GET /article-10000.html HTTP/1.1” |
| $request_time | 整个请求的总时间 | 0.205 |
| $request_method | 请求资源的方式 | GET/PUT/DELETE等 |
| $request_filename | 当前请求的资源文件的路径名称 | |
| $request_body_file | 做反向代理时传送给接收方的资源名称 | |
| $status | HTTP请求状态 | 200,404 |
| $scheme | 请求的协议 | http,https,ftp,udp |
| $server_protocol | 请求资源使用的协议的版本 | HTTP/1.0,HTTP/1.1,HTTP/2.0 |
| $server_addr | 服务器IP地址 | |
| $server_name | 服务器的主机名 | |
| $server_port | 服务器端口号 | |
| $ssl_protocol | SSL协议版本 | TLSv1,TLSv1.2 |
| $ssl_cipher | 交换数据中的算法 | SHA |
| $ssl_protocol | SSL协议版本 | TLSv1,TLSv1.2 |
| $http_referer | 客户端请求时的referer | 通过哪个链接跳过来的 |
| $http_user_agent | 用户终端浏览器等信息 | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36 Edg/96.0.1054.34 |
| $http_cookie | 客户端的cookie信息 | |
| $http_host | 请求地址,即浏览器中你输入的地址 | www.baidu.com |
| $upstream_status | upstream状态 | 200,404 |
| $upstream_addr | upstream的地址 | 真正提供服务的主机地址 |
| $upstream_response_time | 请求过程中,upstream响应时间 | 0.02 |
我们轻松进入nginx目录conf找nginx.conf.defalut强势围观
#log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"';②自定义格式
nginx.conf 任意位置(建议http),预设自己的json格式
下列参数可以到 内置参数 中找寻
log_format log_json '{ "@timestamp": "$time_local", '
'"remote_addr": "$remote_addr", '
'"referer": "$http_referer", '
'"request": "$request", '
'"status": $status, '
'"bytes": $body_bytes_sent, '
'"agent": "$http_user_agent", '
'"x_forwarded": "$http_x_forwarded_for", '
'"up_addr": "$upstream_addr",'
'"up_host": "$upstream_http_host",'
'"up_resp_time": "$upstream_response_time",'
'"request_time": "$request_time"'
' }';
③使用内置参数格式的日志
以基本转发为例子
server {
listen 80;
server_name 192.168.1.111;
#定义编码,转换编码格式。大多数现代浏览器支持(意味着别玩古老的)
charset utf-8;
location /api/{
#在error_log中设置。输出的结果就是json格式了
access_log logs/api/host.access.log log_json;
error_log logs/api/host.error.log;
proxy_pass http://localhost:8080/api/;
}
}
4、开启压缩(压缩大文件内容)
#压缩部分 #设置仅有http1.1以上使用,因为之前本来就不支持 gzip_http_version 1.1; #压缩等级,通常1~9,采用6即可 gzip_comp_level 6; #达到甚么值才开始压缩,建议大点避免全压缩 gzip_min_length 400k; #压缩类型:json,text,js,css,xml gzip_types application/json application/text application/javascript text/css text/xml;5、开启缓存策略 通用配置:
缓存本身可以分为两类: 公共缓存和私有缓存。
public :公共缓存是被多个用户共同使用的。
private :专用缓存专用于单个用户。
#过期时间为一个月 expires 1d; add_header Cache-Control public; add_header Pragma public;缓存时间参数:
expires 30s; //表示把数据缓存30秒
expires 30m;//表示把数据缓存30分
expires 10h;//表示把数据缓存10小时
expires 1d;//表示把数据缓存1天
expires 1M;//表示把数据缓存一个月
6、 location匹配规则啥都不加[大小写敏感] [前缀匹配]继续使用普通linux环境中的环境预设
注意:这个是组合,但凡含有~都可以接受正则匹配
# https://www.coffeeandice.cn
location = /api/ {
···
}
匹配:https://www.coffeeandice.cn/api
匹配:https://www.coffeeandice.cn/api/demo
不匹配:https://www.coffeeandice.cn/Api
不匹配:https://www.coffeeandice.cn/Api/demo
①精确匹配(=)
完全匹配才会生效,差一点都不给你玩
# https://www.coffeeandice.cn
location = /api/ {
···
}
匹配:https://www.coffeeandice.cn/api
不匹配:https://www.coffeeandice.cn/api/demo
②正则匹配 (~)[大小写敏感]
这里可以加入正则表达式
#经典匹配图片后缀名
location ~ .*.(gif|jpg|jpeg|png)${
...
}
# https://www.coffeeandice.cn
location = /api/ {
···
}
匹配:https://www.coffeeandice.cn/api
不匹配:https://www.coffeeandice.cn/Api
③忽略大小写的正则(~*)
# https://www.coffeeandice.cn
location = /api/ {
···
}
匹配:https://www.coffeeandice.cn/api
也匹配:https://www.coffeeandice.cn/Api
④前缀匹配(^~) [中了不会继续往后匹配]
# https://www.coffeeandice.cn
location = /api/ {
···
}
匹配:https://www.coffeeandice.cn/api
也匹配:https://www.coffeeandice.cn/Api
⑤内部跳转(@)[当错误页面处理就好]
内部消化跳转
# 处理错误页面专用就好
location = /api/ {
···
error_page 404 @error_page
}
location @error_page {
···
}
匹配:https://www.coffeeandice.cn/api
也匹配:https://www.coffeeandice.cn/Api



