Nginx实用技巧,497跳转,基本认证,WebDav,在线配置生成,第三方模块等

 

同一个端口实现http跳转https

默认的,http和https需要使用不同的端口,做http到https的跳转,也需要从http的端口(默认为80)跳转到https的端口(443),那么,如何实现在一个端口的情况下,使用http访问转向到https呢?一个简单的方法是利用nginx的497错误码

原理:http和https是tcp的上层协议,当nginx服务器建立tcp连接后,根据收到的第一份数据来确定客户端是希望建立tls还是http。nginx会判断tcp请求的首写节内容以进行区分,如果是0x80或者0x16就可能是ssl或者tls,然后尝试https握手。如果端口开启了https,但请求过来的并不是,会抛出一个http级别的错误,这个错误的状态码是NGX_HTTP_TO_HTTPS,错误代码497,然后在返回response中会抛出一个400错误(因为497不是标准状态码,丢给浏览器也没有用),这时浏览器会显示"400 Bad Request,The plain HTTP request wes sent to HTTPS port"

这样,可以对497进行路由处理,做302重定向,核心代码如下:

error_page 497 https://$host:8080$request_uri;

配置示例:

HttpAuthBasic基本认证

基本结构:

location / {
auth_basic "Login!";
auth_basic_user_file conf/passwd;
}

说明:

auth_basic "Login!"; 启用基本认证,密码框提示语句为Login!
auth_basic off; 关闭基本认证
auth_basic_user_file conf/passwd; 定义密码文件路径
密码文件格式为:
user:passwd:comment     #用户名:crypt加密后的密码串:注释
获取密码串的方式可以使用htpasswd命令,或者使用这个网站:https://tool.lu/htpasswd/
注意:加密方式为crypt(3)
可以设置在http, server, location, limit_except级别

在线配置文件生成

在线生成nginx配置文件
https://nginxconfig.io/
可在本生成配置文件,功能非常强大

图片防盗链

通过检测header字段里的referer字段判断,若referer来自规定的域名或空时,认为是正常的访问,否则为盗链
# https访问http的图片,因为安全性规定,所带referer为空

none,允许没有http_refer的请求访问资源
blocked,代表有referer但是被防火墙或者是代理给去除了
*.xxx.com,允许xxx.com站点的访问

允许referer为xxx.com 和谷歌、百度对本站图片的访问,其它访问返回403

Nginx模块

https://github.com/yzprofile/ngx_http_dyups_module ,通过Restful接口更新upstreams配置,不需要执行reload操作

https://github.com/weibocom/nginx-upsync-module ,动态修改后端upstreams配置,不需要执行reload操作,支持etcd/consul/upsysnc_lb

杂项

一个站点配置多个域名
server_name 后跟多个域名即可,多个域名间用空格分隔

添加基本帐号验证

开启列出目录文件

默认列出txt等文件时会在浏览器上显示内容,若要直接下载,可添加配置:

配置默认站点
多个主机时,默认从上到下查找,若匹配不到时,会返回第一个虚拟主机的内容
设置默认主机:添加default属性
listen 80 default;

直接返回验证文件
相当于在站点目录放一个txt文件

upstream反射代理

proxy_pass加不加杠的区别:
不加杠 proxy_pass http://tomcats
uri部分不做修改,直接传递,如

加杠 proxy_pass http://tomcats/  /也是uri
uri部分会被修改为该参数中的uri

upstream开启keepalive

开启nginx和后端服务之间的keepalive能减少频繁创建tcp连接造成的资源消耗,开启keepalive要求http 1.1
proxy_set_header Connection ""; 为兼容老的协议以及防止http头中有Connection close 导致keepalive失效,清除掉头部的Connection

因为 Linux 的 epoll-and-accept 负载均衡算法采取了类似 LIFO 的行为,结果导致请求在不同进程间的分配变得十分不均衡
nginx中激活了 reuseport 指令后,通过 top 命令可以看到 time 分配变得均衡

listen 80 reuseport;

 来源:https://pdf.us/2018/05/09/1008.html

评论

此博客中的热门博文

Tailscale 开源版中文部署指南(支持无限设备数、自定义多网段 、自建中继等高级特性)

iOS任意版本号APP下载(含itunes 12.6.5.3 最后带AppStore版本)

关于 N1 旁路由的设置

Mifare Classic card(M1卡)破解过程记录(准备+理论+获取扇区密钥+数据分析)

Blogger搭建国内可正常访问博客(超详细教程)

一些免费的云资源

打造一个可国内访问的Blogger(Blogspot)方法

百度站长平台中接入Blogger博客

Mifare Classic card(M1)卡破解过程

重新学习并解锁emby4.6.7,4.7.2版本