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 的一些心得

高可用用户中心设计

群晖硬软件的的各种坑及解决方案

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

星际蜗牛安装黑裙(群晖)制作家用nas

Cloudflare免费版设置说明

N1 PT下载小钢炮固件下载及安装说明

分析redis key大小的几种方法

Windows7系统目录迁移:Users,Program Files,ProgramData

个性化推荐从入门到精通