Nginx 实战案例

本贴最后更新于 2403 天前,其中的信息可能已经渤澥桑田

一、前提条件

<font size=4>1、Nginx 编译安装
2、Nginx 中文文档

二、代理类型

>****正向代理:**** A想向C借钱,但是C不认识A所以不借给他,然后A就通过B向C借钱,B借到钱之后再转交给A,在这个过程中B就扮演了一个正向代理的角色,这个过程中,真正借钱的人是谁,C是不知道的

反向代理: A 想向 C 借钱,然后 C 借给他了,但是实际上这个钱可能 C 向 B 借的~至于钱到底是谁的,A 是不知道的

二、实战案例

2.1.反向代理

``` server { listen 80; server_name doodblog.linkdood.cn; access_log /data/Yunwei/nginx/logs/doodblog_access.log main; location / { proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Host $server_name; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://172.16.8.185:8080; } }
</font> ### 2.2.负载均衡 <font size=4> >****upstream模块:**** 提供负载均衡、故障转移等功能 |****负载均衡类型****||| |:----:|:-:|:-:| |****类型****|****描述****|****备注****| |Round Robin|轮训|依次分配| |Weight|权重|根据分配权重成比例分配| |ip_hash|IP哈希|根据IP哈希结果分配| |fair|根据后端服务器响应时间|第三方插件| |url_hash|根据访问url哈希|第三方插件| |****设备状态****||| |:--:|:-:|:-:| |****状态****|****描述****|****备注****| |down|当前服务器不提供服务| | |weight|设置权重,数值越大,权重越高|默认:1 | |max_fails|如失败次数超过最大值,返回proxy_next_upstream 模块定义的错误|默认:1| |backup|备用服务器,当所有非backup机器down或忙的时候,请求backup机器| | |fail_timeout max_fails|达到多少次失败后,暂停多长时间| |

负载均衡及案例

upstream index_test {
ip_hash;
server 127.0.0.1:8000 weight=1;
server 127.0.0.1:8001 weight=2 down;
server 127.0.0.1:8002 weight=2;
server 127.0.0.1:8003 weight=2 backup;
server 127.0.0.1:8004 weight=2 max_fails=3 fail_timeout=30s;
}

server {
listen 80;
server_name wiki.liandoudou.com.cn;
access_log /data/soft/nginx/logs/wiki_access.log main;
location / {
proxy_pass http://index_test;
}
}

</font> ### 2.3.下载列表 <font size=4> >***root、alias区别*** ****alias:**** 访问/download/android路径,实际去找 /data/packages/client/anr/comm 目录 ****root:**** 访问/download/ios路径,实际去找/data/packages/client/anr/comm/download/ios目录

server {
listen 80;
server_name doodblog.linkdood.cn;
access_log /data/Yunwei/nginx/logs/doodblog_access.log main;
# alias 指定程序路径
location /download/android {
alias /data/packages/client/anr/comm;
autoindex on;
}
# root 指定程序路径
location /download/ios {
root /data/packages/client/anr/comm;
autoindex on;
}
}

</font> ### 2.4.代理PHP程序 <font size=4>

server {
listen 80;
server_name getip.linkdood.cn;

location ~ \.php$ { root /data/Yunwei/nginx/html; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; } # 关闭favicon提示 location /favicon.ico { log_not_found off; access_log off; }

}

</font> ### 2.5.正则表达式 <font size=4> |正则符合|正则描述|备注| |:-----:| |\\|转义符| | |^|匹配字符开始位置| | |$|匹配字符结束位置| | |.*|匹配任意字符串| | |~|区分大小写| | |~*|不区分大小写| |!~|区分大小写,不匹配| | |!~*|不区分大小写,不匹配| | |(x\|y\|z)|或匹配,x或y或z| | |-f|判断文件是否存在| | |-d|判断目录是否存在| | |-e|判断文件或目录是否存在| | |-x|判断是否为可执行文件| |

#不区分大小写,匹配(at|bg0|hd|ht|pm|wc)
location ~* /(at|bg0|hd|ht|pm|wc)(.*) {
root /data/linkdood/data/bigdata;
}

</font> ### 2.6.rewrite重定向 <font size=4> |重定向标记|标记描述|备注| |:--:| |last|相当于apache里面的[L]标记,表示rewrite| | |break|本条规则匹配完成后,终止匹配,不再匹配后面的规则| | |redirect|返回302临时重定向,浏览器地址会显示跳转后的URL地址| | |permanent|返回301永久重定向,浏览器地址会显示跳转后的URL地址| |

将所有 http 请求,永久重定向到 https

rewrite ^(.*)host$1 permanent;

www.linkdood.cn/doodlog/ 永久重定向到 doodblog.linkdood.cn

rewrite ^/connect$ http://connect.myweb.com permanent;
rewrite ^/connect/(.*)$ http://connect.myweb.com/$1 permanent;

将 doodblog.linkdood.cn 永久重定向到 www.linkdood.cn/doodlog/

if ($host = "doodblog.linkdood.cn"){
rewrite ^/(.*)$ http://www.linkdood.cn/doodlog/$1 permanent;
}

将 linkdood.cn 跳转到 www.linkdood.cn

if ($host != 'www.linkdood.cn' ) {
rewrite ^/(.*)$ http://www.linkdood.cn/$1 permanent;
}

将 doodlog.linkdood.cn/image/下面数字 + png 的图片跳转到 404

rewrite ^/image/([0-9]+).png$ /404.html last;

</font> ### 2.7.访问限制 <font size=4> >***allow、deny 属于模块(ngx_http_access_module***) ****allow:**** 允许IP或IP段访问,区间:http、server、location、limit_except ****deny:**** 拒绝IP或IP段访问,区间:http、server、location、limit_except

#屏蔽单个 IP 的命令是
deny 192.168.1.1
#封整个段即从 123.0.0.1 到 123.255.255.254 的命令
deny 123.0.0.0/8
#封 IP 段即从 123.45.0.1 到 123.45.255.254 的命令
deny 124.45.0.0/16
#封 IP 段即从 123.45.6.1 到 123.45.6.254 的命令是
deny 123.45.6.0/24

location / {
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
allow 2001:0db8::/32;
deny all;
}

禁止 htaccess

location ~//.ht {
deny all;
}

禁止/data 目录

location ~ ^/data {
deny all;
}

禁止单个文件

location ~ /www/log/123.log {
deny all;
}

</font> ### 2.8.访问限速 <font size=4> >****limit_req:**** 限制请求数 ****limit_conn:**** 限制并发连接数 ****限制单IP并发数****

#并发及带宽限制,对单个 IP 限制最大 2 个连接数,每个连接最大限速 100k
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
...
server {
...
location /download/ {
limit_conn addr 2;
limit_rate 100k;
}
}
}

测试: -c 并发请求数 -n 总请求数 -k 保持 KeepAlive

ab -n100 -c100 -k doodblog.linkdood.cn

****限制单会话请求数****

单 IP 最大请求数为 1 个/s,最大 5 个延迟请求,超过立即返回 503

http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
...
server {
...
location /search/ {
limit_req zone=one burst=5 nodelay;
}
}
}

</font>
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖 • 2 关注
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    315 引用 • 547 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...