File tree Expand file tree Collapse file tree 16 files changed +803
-55
lines changed Expand file tree Collapse file tree 16 files changed +803
-55
lines changed Original file line number Diff line number Diff line change 2
2
layout : post
3
3
title : " nginxh中return的用法"
4
4
date : 2020-02-04 21:24:29 +0800
5
- tags :
5
+ tags : nginx
6
6
description :
7
7
---
8
8
Original file line number Diff line number Diff line change
1
+ ---
2
+ layout : post
3
+ title : " nginx中return的使用"
4
+ date : 2020-02-19 14:52:57 +0800
5
+ tags : nginx
6
+ description :
7
+ ---
8
+
9
+ ### nginx中return关键字,可以在server、location、if中使用
10
+
11
+ ### 直接返回链接
12
+ {% highlight nginx %}
13
+ server{
14
+ ..
15
+ ..
16
+ return http://www.baidu.com ;
17
+ }
18
+ {% endhighlight nginx %}
19
+
20
+ ### 返回字符串
21
+ {% highlight nginx %}
22
+ server{
23
+ ..
24
+ ..
25
+ return 200 "error";
26
+ }
27
+ {% endhighlight nginx %}
28
+
29
+ ### 返回变量
30
+ {% highlight nginx %}
31
+ server{
32
+ ..
33
+ ..
34
+ return 200 "$host$request_uri";
35
+ }
36
+ {% endhighlight nginx %}
37
+
38
+ ### HTML代码
39
+ {% highlight nginx %}
40
+ server{
41
+ ..
42
+ ..
43
+ return 200 "<html ><script >window.location.href='$host$request_uri'</script ></html >";
44
+ }
45
+ {% endhighlight nginx %}
46
+
47
+ ### json
48
+ {% highlight nginx %}
49
+ server{
50
+ ..
51
+ ..
52
+ return 200 '{"name":"muyu","id":1}';
53
+ }
54
+ {% endhighlight nginx %}
Original file line number Diff line number Diff line change
1
+ ---
2
+ layout : post
3
+ title : " nginx代理"
4
+ date : 2020-02-19 15:31:13 +0800
5
+ tags : nginx
6
+ description :
7
+ ---
8
+
9
+ ## 正向代理
10
+
11
+ {% highlight nginx %}
12
+ server{
13
+ listen 80 default_server;
14
+ resolver 119.29.29.29//国内公共NDS
15
+ location / {
16
+ proxy_pass http://$host$request_uri;
17
+ }
18
+ }
19
+ {% endhighlight nginx %}
20
+ dns.lisect.com 全国公众DNS服务器大全
21
+
22
+ ## 反向代理
23
+ 由于浏览器的默认访问端口是80,所以很多时候需要让80端口来代理8080端口,使访问更加方便
24
+ {% highlight nginx %}
25
+ server{
26
+
27
+ listen 80;
28
+ server_name www.example.com ;
29
+
30
+ locatino / {
31
+ proxy_pass http://127.0.0.1:8080;
32
+ proxy_set_header Host $host;
33
+ #真实IP
34
+ proxy_set_header X-Real-IP $remote_addr;
35
+ #访问IP
36
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
37
+ }
38
+ }
39
+ {% endhighlight nginx %}
40
+
41
+ proxy_pass http:// (https://) + 域名或IP + 端口
42
+
43
+ > proxy_set_header 设置代理服务器的header信息
44
+ > proxy_set_header field value
45
+ > field 更改项目或者变量名,如host
46
+ > Value 变量值
47
+ > 未设置得话,则为默认为proxy_pass后的值
48
+
49
+ 通过这种访问方式可以直接将域名指向到8080端口,前提是,需要对这个域名对8080也进行解析
Original file line number Diff line number Diff line change
1
+ ---
2
+ layout : post
3
+ title : " nginx得rewrite规则"
4
+ date : 2020-02-19 14:22:17 +0800
5
+ tags : nginx
6
+ description :
7
+ ---
8
+
9
+ rewrite格式
10
+ > 格式:rewrite regex replacement [ flag]
11
+ >
12
+ > rewrite配置可以在server、location以及if配置段内生效
13
+ >
14
+ > regex是用于匹配URI的正则表达式,其不会匹配到$host(域名)
15
+ >
16
+ > replacement是目标跳转的URI,可以以http://或者https://开头,也可以省略掉$host,直接写$request_uri部分(即请求的链接)
17
+ >
18
+ > flag,用来设置rewrite对URI的处理行为,其中有break、last、rediect、permanent
19
+ >
20
+ > rediect和permanent的区别在于,前者为临时重定向(302),而后者是永久重定向(301),对于用户通过浏览器访问,这两者的效果是一致的。但是,对于搜索引擎蜘蛛爬虫来说就有区别了,使用301更有利于SEO。所以,建议replacemnet是以http://或者https://开头的flag使用permanent。
21
+ >
22
+ > break和last如果直接在server中使用的话,并没有明显的区别,都是匹配到规则的话,直接进行访问,如果在location中的话,break不会跳出当前location,继续按照匹配的规则继续执行;如果是last的话,会跳出当前location,匹配其他的location
23
+
24
+ ### break和last的说明
25
+
26
+ 现在有如下rewrite规则
27
+ {% highlight nginx %}
28
+ server{
29
+ ....
30
+ ....
31
+ location / {
32
+ rewrite /1.html /2.html;
33
+ rewrite /2.html /3.html;
34
+ }
35
+
36
+ location /2.html {
37
+ rewrite 2.html a.html;
38
+ }
39
+
40
+ location /3.html {
41
+ rewrite 3.html b.html;
42
+ }
43
+
44
+ }
45
+ {% endhighlight nginx %}
46
+ 直接访问的话,会按照这个顺序,进行跳转** 1.html => 2.html ; 2.html => 3.html ; 3.html => b.html**
47
+
48
+ 如果在第一个location中的第一行,接口加上break
49
+
50
+ {% highlight nginx %}
51
+ server{
52
+ ....
53
+ ....
54
+ location / {
55
+ rewrite /1.html /2.html break;
56
+ rewrite /2.html /3.html;
57
+ }
58
+
59
+ location /2.html {
60
+ rewrite 2.html a.html;
61
+ }
62
+
63
+ location /3.html {
64
+ rewrite 3.html b.html;
65
+ }
66
+
67
+ }
68
+ {% endhighlight nginx %}
69
+
70
+ 访问的时候,匹配到break就直接停止继续访问了, 1.html => 2.html
71
+
72
+ 如果把break改为last的话
73
+
74
+ {% highlight nginx %}
75
+ server{
76
+ ....
77
+ ....
78
+ location / {
79
+ rewrite /1.html /2.html last;
80
+ rewrite /2.html /3.html;
81
+ }
82
+
83
+ location /2.html {
84
+ rewrite 2.html a.html;
85
+ }
86
+
87
+ location /3.html {
88
+ rewrite 3.html b.html;
89
+ }
90
+
91
+ }
92
+ {% endhighlight nginx %}
93
+ 当访问匹配到到last时,当前location下面的规则不在匹配,继续匹配其他符合条件的location规则,所以应该是 ** 1.html => 2.html ; 2.html => a.html** 的访问结果
Original file line number Diff line number Diff line change
1
+ ---
2
+ layout : post
3
+ title : " nginx防盗链设置"
4
+ date : 2020-02-19 15:07:31 +0800
5
+ tags : nginx
6
+ description :
7
+ ---
8
+
9
+ ### 应用场景
10
+ > 对于一些图片资源来说,如果可能不希望随意去使用,这样的话,在nginx中可以使用valid_referers来进行设置
11
+
12
+ {% highlight nginx %}
13
+ location ~ * \. (gif|jpg|png|webp)$ {
14
+ valid_referers mybolg.com * .mybolg.com
15
+ if ($invalid_referer) {
16
+ return 403;
17
+ }
18
+ }
19
+ {% endhighlight nginx %}
20
+
21
+ 这段规则的含义就是,如果不是从mybolg.com域名下获取图片,会直接返回403代码
22
+
23
+ ### valid_referers的参数:
24
+
25
+ none---请求包头没有Referer字段,直接图片网址获取图片的情况
26
+
27
+ blocked--Referer字段存在,但是没有了https或者http开头,可能被防火墙或者代理服务器改变所致
28
+
29
+ server_names--允许的服务器域名,我们在使用时可以仅仅使用该项即可
Original file line number Diff line number Diff line change
1
+ ---
2
+ layout : post
3
+ title : " nginx访问控制"
4
+ date : 2020-02-21 09:47:40 +0800
5
+ tags : nginx
6
+ description :
7
+ ---
8
+
9
+ 简单来说,nginx的访问控制其实就是一些匹配规则配合allow/deny address | unix: | CIDR | all
10
+ > address IP地址
11
+ > CIDR IP段
12
+ > unix: socker地址
13
+ > all 全部
14
+
15
+ {% highlight nginx %}
16
+ server{
17
+ ...
18
+ ...
19
+ allow 127.0.0.1;
20
+ deny all;
21
+ }
22
+ {% endhighlight nginx %}
23
+
24
+ 上述配置表示,只有127.0.0.1可以进行访问,其他的全部拒绝
25
+
26
+ ### location
27
+
28
+ {% highlight nginx %}
29
+ location ~ ".html|\. ht" {
30
+ deny all;
31
+ }
32
+ {% endhighlight nginx %}
33
+
34
+ 对于匹配规则中的第一个".html"来说,符号"."代表的是任意字符,而后面的"\. ht"中的符号"."之前加了转义符,才是真正的符号".",所以上述规则对于链接中或后面含有html的请求,或者带有".ht"的链接,都会拒绝访问
35
+
36
+ ### $document_uri
37
+
38
+ $document_uri,其实大体上跟location规则一致,只是写法不同,对于上述规则来说,写法如下
39
+ {% highlight nginx %}
40
+ if($document_uri的控制 ~ ".html|\. ht") {
41
+ deny all;
42
+ }
43
+ {% endhighlight nginx %}
44
+
45
+ ### $request_uri
46
+
47
+ 基于$request_uri的控制,$request_uri包含参数,所以多用于参数的匹配规则
48
+ {% highlight nginx %}
49
+ location ~ "gid=\d{4,9}" {
50
+ deny all;
51
+ }
52
+ {% endhighlight nginx %}
53
+ 如果gid后面得参数是数字且长度在4到9之间,就会拒绝访问
54
+
55
+ ### $http_user_agent
56
+
57
+ 对于一些异常的访问,我们可以通过user_agent来发现他的规律,并拒绝
58
+ {% highlight nginx %}
59
+ if ($user_agent ~ 'YisouSpider|MJ12bot/v1.4.2|YoudaoBot|Tomato')
60
+ {
61
+ deny all;
62
+ }
63
+ {% endhighlight nginx %}
64
+ 对于user_agent中包含以上关键字的,将会拒绝
Original file line number Diff line number Diff line change
1
+ ---
2
+ layout : post
3
+ title : " nginx负载均衡"
4
+ date : 2020-02-21 09:12:35 +0800
5
+ tags : nginx
6
+ description :
7
+ ---
8
+
9
+ > 在有些情况下,服务器访问量过大,单一服务器无法承受,这时候就用到了nginx负载均衡的特性
10
+
11
+ > 负载均衡其实也是一种反向代理
12
+
13
+ 在http中定义一组upstream,然后在proxy_pass中使用定义好得upsteam,然后nginx在访问得时候,就会将请求发送到服务器中
14
+
15
+ {% highlight nginx %}
16
+ http{
17
+ upstream www{
18
+ server 192.168.0.1;
19
+ server 192.168.0.2;
20
+ server 192.168.0.3;
21
+ }
22
+
23
+ server{
24
+
25
+ listen 80;
26
+ server_name muyu.com;
27
+
28
+ location / {
29
+ proxy_pass http://www/;
30
+ proxy_set_header Host $host;
31
+ #真实IP
32
+ proxy_set_header X-Real-IP $remote_addr;
33
+ #访问IP
34
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
35
+ }
36
+ }
37
+ }
38
+ {% endhighlight nginx %}
39
+
40
+ 这样配置之后,对于访问到nginx的请求会平均的分配到upstream中的IP组,如果想指定一下IP的分配权重,只需要在每个IP后面加上weight参数即可
41
+
42
+ {% highlight nginx %}
43
+ upstream www{
44
+ server 192.168.0.1 weight=1;
45
+ server 192.168.0.2 weight=2;
46
+ server 192.168.0.3 weight=1;
47
+ }
48
+ {% endhighlight nginx %}
49
+
50
+ 设置之后,分配0.2的数量是0.1和0.3的两倍,0.1和0.3的分配数量相同
51
+
52
+ 这样配置之后,对于同一个IP的访问来说,请求的到upstream的每个IP都是随机的,可以第一次是第一个IP,到第二次请求就会变成第二个IP,这样就会导致登录状态丢失等问题
53
+
54
+ 解决这个问题也很简单,只需要在upstream中加入nginx中自带的ip_hash算法,就可以保证用一个IP访问时,请求到的总是upstream中的同一IP
55
+
56
+ {% highlight nginx %}
57
+ upstream www{
58
+ server 192.168.0.1 weight=1;
59
+ server 192.168.0.2 weight=2;
60
+ server 192.168.0.3 weight=1;
61
+ ip_hash
62
+ }
63
+ {% endhighlight nginx %}
You can’t perform that action at this time.
0 commit comments