直接回答:Nginx 配置是分层的:main 全局、events 管工作模式、http 管所有站点、server 是一个站点、location 匹配路径;改配置基本都在 server 和 location 这两层里做。

nginx基本配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
main                                # 全局配置

events { # nginx工作模式配置
}

http { # http设置
....
client_max_body_size 20m; #限制上传大小为20m,如果设置为0;就是不限制大小

server { # 服务器主机配置
....
location { # 路由配置
....
}

location path {
....
}

location otherpath {
....
}
}

server {
....
client_max_body_size 20m; #限制上传大小为20m,如果设置为0;就是不限制大小
location {
....
}
}

upstream name { # 负载均衡配置
....
}
}

下面是 nginx 一些配置中常用的内置全局变量,你可以在配置的任何位置使用它们。

变量名 1 功能 2
$host 请求信息中的 Host,如果请求中没有 Host 行,则等于设置的服务器名
$request_method 客户端请求类型,如 GET、POST
$remote_addr 客户端的 IP 地址
$args 请求中的参数
$content_length 请求头中的 Content-length 字段
$http_user_agent 客户端 agent 信息
$http_cookie 客户端 cookie 信息
$remote_addr 客户端的 IP 地址
$remote_port 客户端的端口
$server_protocol 请求使用的协议,如 HTTP/1.0、HTTP/1.1\
$server_addr 服务器地址
$server_name 服务器名称
$server_port 服务器的端口号

nginx负载均衡

Upstream 指定后端服务器地址列表,在 server 中拦截响应请求,并将请求转发到 Upstream 中配置的服务器列表。

1
2
3
4
5
6
7
8
9
10
11
12
13
upstream balanceServer {
server 192.168.1.100:12345;
server 192.168.1.100:12345;
server 192.168.1.100:12345;
}

server {
server_name fe.server.com;
listen 80;
location /api {
proxy_pass http://balanceServer;
}
}

上面的配置只是指定了 nginx 需要转发的服务端列表,并没有指定分配策略。

默认情况下采用的是轮询策略,将所有客户端请求轮询分配给服务端。这种策略是可以正常工作的,但是如果其中某一台服务器压力太大,出现延迟,会影响所有分配在这台服务器下的用户。

nginx常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 快速关闭Nginx,可能不保存相关信息,并迅速终止web服务
nginx -s stop
# 平稳关闭Nginx,保存相关信息,有安排的结束web服务
nginx -s quit
# 因改变了Nginx相关配置,需要重新加载配置而重载
nginx -s reload
# 重新打开日志文件
nginx -s reopen
# 为 Nginx 指定一个配置文件,来代替缺省的
nginx -c filename
# 不运行,而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件
nginx -t
# 显示 nginx 的版本
nginx -v
# 显示 nginx 的版本,编译器版本和配置参数
nginx -V
# 格式换显示 nginx 配置参数
2>&1 nginx -V | xargs -n1
2>&1 nginx -V | xargs -n1 | grep lua

Nginx——location常见配置指令,alias、root、proxy_pass

  1. 【alias】——别名配置,用于访问文件系统,在匹配到location配置的URL路径后,指向【alias】配置的路径。如:
1
2
3
4
location /test/
{
alias/first/second/img/;
}

即:请求/test/1.jpg(省略了协议与域名),将会返回文件/first/second/img/1.jpg。

  1. 【root】——根路径配置,用于访问文件系统,在匹配到location配置的URL路径后,指向【root】配置的路径,并把location配置路径附加到其后。如:
1
2
3
4
location /test/
{
root /first/second/img/;
}

即:请求/test/1.jpg(省略了协议与域名),将会返回文件/first/second/img/test/1.jpg,相较于alias,使用root会把/test/附加到根目录之后。也就是说alias会截断location匹配的路径,root不会截断,用在umi的时候,可能需要再加一个try_files (/test/user/login,实际没这个文件,加上tryfile之后让返回index.html)

  1. 【proxy_pass】——反向代理配置,用于代理请求,适用于前后端负载分离或多台机器、服务器负载分离的场景,在匹配到location配置的URL路径后,转发请求到【proxy_pass】配置的URL,是否会附加location配置路径与【proxy_pass】配置的路径后是否有"/"有关,有"/"则不附加,如:
1
2
3
4
5
location /test/
{
proxy_pass http://127.0.0.1:8080/;
}
// 即:请求/test/1.jpg(省略了协议与域名),将会被nginx转发请求到http://127.0.0.1:8080/1.jpg(未附加/test/路径)。
1
2
3
4
5
location /test/
{
proxy_pass http://127.0.0.1:8080;
}
//即:请求/test/1.jpg(省略了协议与域名),将会被nginx转发请求到http://127.0.0.1:8080/test/1.jpg(附加/test/路径)。
1
2
3
4
5
location/test/
{
proxy_pass http://127.0.0.1:8080/img;
}
//即:请求/test/1.jpg(省略了协议与域名),将会被nginx转发请求到http://127.0.0.1:8080/img1.jpg(未附加/test/路径,但附加了/test/之后的路径)。

版权声明:本文为CSDN博主「leeon_l」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/zhangliangzi/article/details/78257593

Nginx 转发Get,Post请求

1. 根据请求类型转发不同服务器 相同的URL,分Get,Post.两种请求方式,判断请求方式不同进行不同的转发。

1
2
3
4
5
6
7
8
9
location /http/submitSms{
if ($request_method!~^(POST)$){
proxy_pass http://xx.xx.xxxx.xx:8009;
}
proxy_pass http://xx.xx.xxxx.xx:8010;
proxy_set_header
proxy_set_header
proxy_set_header
}

注意: if后面需要有空格,POST必须大写!!! 这中方法还没有验证

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<template>
<view>
<u-input @input="input($event,1)" border="none" :value="getValue.a" type="digit"></u-input>
<u-input @input="input($event,2)" border="none" :value="getValue.b" type="digit"></u-input>
</view>
</template>
<script>
export default{
data (){
return {
valueObj: {
type: 0,
value: 0
}
}
},
methods: {
input: function(e, a) {
this.valueObj = {
type: a,
value: e,
}
},
},
computed:{
getValue: function(){
const v = this.valueObj.value;
if (v == "") {
return {
"a": "",
"b": "",
"c": "",
"d": "",
"e": "",
"f": "",
"g": "",
}
}
switch(this.valueObj.type){
case 1:
return {
"a":v,
"b":v*10
};
case 2:
return {
"a":v*0.1,
"b":v
}
}
}
}
}
</script>

这篇笔记整理自我自己的实践记录,如果做法有出入,或者你踩过别的坑,欢迎到留言板一起聊聊。

站内搜索

没有找到内容!