Nginx配置详解

安装

安装Nginx:apt-get install nginx

测试是否成功:nginx -t

查看版本:nginx -v

配置文件路径

配置文件总目录:/etc/nginx

全局配置文件:/etc/nginx/nginx.conf

子级配置文件目录:/etc/nginx/nginx.d

日志目录:var/log/nginx

主战场:配置.conf文件

使用Nginx的主战场是编辑配置文件。

全局配置文件中有这条语句使用路由:include /etc/nginx/conf.d/*.conf; 因此我们要做的是在nginx.d目录下创建新的*.config文件,定义server代理规则。

1.基本配置方式:

server {          # 开启一个服务
    listen 8888;  # 定义监听的ip及端口
    location / {  # 匹配规则
        root /etc/nginx/html;      # 响应请求的文件目录路径
        index index.html;          # 响应请求的文件名
    }
}

基本属性字段:

属性字段 作用规则
listen Server监听的ip和port,当ip/port匹配时候才进行下一步匹配
location 匹配路由规则,正则匹配
root 定义Server相应请求的html文件所在路径
index 定义响应请求后返回的文件名称或格式
return 定义响应请求后返回的http状态码
alias 当location匹配非根目录时使用alias,而非root

loction有几种不同的路由匹配方式,其对应的优先级和含义有所区别,使用=精确匹配的优先级最高。

location匹配方式:

匹配规则 示例 含义 优先级
location /page 通用匹配 3
~ location ~ /page 优先匹配 2
= location = /page 精确匹配 1
@ location @name 内部重定向至name规则

内部重定向示例:将/page路由重定向至show方法处理

location /page {
    try_files $uri $uri/ @show;
  }
 ​
location @show {
    return 403;
  }

2.访问控制

nginx可在location中设置访问控制,只设置允许的ip的地址访问:

location /a {
    stub_status on;   # 开启nginx的状态页,响应访问状态信息
    allow 192.168.23.37; # 允许访问的ip地址
    allow 192.168.94.1;
    deny all;   # 拒绝其他ip地址访问
}

3.反向代理介绍

代理是指使用中间人,代理自己去做一件事,只需返回给我需要的结果就可。

正向代理:客户端的代理,代替客户端向外部服务器发送请求,获取服务端响应并返回给客户。对服务端而言,客服端的真实ip地址是隐藏的。

正向代理

反向代理:服务端的代理,代替服务端接收客户端的请求,并转发服务端的响应给客户。对客户端而言,服务端的真实ip地址是隐藏的。


反向代理

反向代理作用主要有两点:可以使用负载均衡提高客户访问的并发量;隐藏服务端真实ip防止服务器受到恶意攻击。

4.配置反向代理

使用proxy_pass字段实现反向代理

注意proxy_pass后路径结尾是否包含/对反向代理定义的意义是不同的。

# 对外公开的访问地址
server {
    listen 192.168.94.129:8888;
    location / {
        proxy_pass 192.168.94.129:8889;  # 无"/"结尾,自己及后续的路径及其后续路径都使用反向代理处理。
        #  proxy_pass 192.168.94.129:8889/;  # 有"/"结尾,后续的路径及其参数等关键字都由http://a.com/来处理
    }
}


# 模拟真实服务器的nginx服务
server {
    listen 8889;
    location / {
        root /etc/nginx/html;      # 目录路径
        index index.html;          # 文件名
    }
}

当外部访问192.168.94.129:8888端口"/"路径及其后续路径时,nginx会代理获取192.168.94.129:8889地址下location指定的路径数据响应,实现反向代理。

负载均衡

利用反向代理,通过upstream字段来定义一组Tomcat,并指定负载策略,可使用多台服务器同时工作,减轻并发量大造成的服务器压力。

继续在本机使用不同端口模拟不同服务器:

# 定义后端服务器集合列表,指定负载策略,默认为平级的轮询负载。
upstream meiduo {
    server 192.168.94.129:8001 weight=2; #服务器1,权重2
    server 192.168.94.129:8002 weight=4; #服务器2,权重4,被使用频率更高
}
# 对外公开的访问地址
server {
    listen 8885;
    location / {
        proxy_pass http://meiduo; # 使用上面定义的meiduo服务器列表进行反向代理
        proxy_set_header X-Real-IP $remote_addr; # 记录客户端的ip地址
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

server {
    listen 8001;
    location / {
        root /etc/nginx/html; 
        index index.html;  
    }
}

server {
    listen 8002;
    location / {
        root /etc/nginx/html;    
        index index.html;          
}

特别注意负载均衡服务器的location配置除了反向代理proxy_pass字段外,同样不可缺少以下两个字段,否则日志文件将无法记录客户端的ip

 proxy_set_header X-Real-IP $remote_addr; 
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

负载策略常用的方法除了weight权重之外,还有ip_hashfairurl_hash方式。

weight:指定轮询权重,值越大,分配到的几率就越高,适用于后端服务器性能不均衡情况。

ip_hash:按访问IP的哈希结果分配请求,分配后访客访问固定后端服务器,有效的解决动态网页会话共享问题。

fair:基于后端服务器的响应时间来分配请求,响应时间短的优先分配。

url_hash:按访问URL的哈希结果分配请求,使同URL定向到同一台后端服务器,可提高后端缓存服务器的效率。

日志解析

Nginx默认提供了两个日志文件 access.log和error.log,通过access.log可以得到用户请求的相关信息;通过error.log可以获取某个web服务故障或其性能瓶颈等信息。而且nginx的日志支持定制化格式,这样我们就可以根据实际的业务情况更好的高效工作。最常见的场景就是获取客户端的IP,记录用户访问量。

全局配置文件/etc/nginx/nginx.conf指定了这两个日志的存放路径:

access_log /var/log/nginx/access.log;  
error_log /var/log/nginx/error.log;

一个完整的日志配置除属性名、储存路径外,还包括日志格式:log_format,其以格式化的方式输出我们想要的日志字段,常用的nginx内置变量有:

$remote_addr 前一台主机的ip地址,不一定是真实的客户端IP
$remote_user 用于记录远程客户端的用户名称(一般为“-”)
$time_local 用于记录访问时间和时区
$request 用于记录请求的url以及请求方法
$status 响应状态码,例如:200成功、404页面找不到等。
$body_bytes_sent 给客户端发送的文件主体内容字节数
$http_referer 可以记录用户是从哪个链接访问过来的
$http_user_agent 用户所使用的代理(一般为浏览器)

我们可以通过定义log_format字段,拼接这些nginx变量,自定义输出格式化的日志内容。

自定义日志

  1. 配置日志输出格式变量

    在全局配置文件/etc/nginx/nginx.conf中,定义日志输出格式字段log_format,命名该格式为proxy_format:

log_format proxy_format '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent "$http_referer"'
                    '"$http_user_agent" "$http_x_real_ip" "$http_x_forwarded_for"';
定义好的日志输出格式可在子级配置文件中按格式名使用。
  1. 配置应用子级日志
  • 为了便于不同app日志的分类管理,应将日志按不同app名分文件夹存放,指定方式如下:/var/logs/nginx/appname/access.log

  • 需在创建的子级配置文件,如:/etc/nginx/conf.d/backend.conf中配置日志存放路径及日志格式。

~# vim /etc/nginx/conf.d/backend.conf
server {
  listen 192.168.94.129:8001;
  root /var/www/html/app1/;
  access_log /var/log/nginx/app1/access.log proxy_format;
  real_ip_header X-Forwarded-For; 
  set_real_ip_from 192.168.0.0/16; 
  real_ip_recursive on;
  location / {
    try_files $uri $uri/ =404;
  }
}
  • 需提前创建存放日志文件的文件夹、应用文件夹及静态文件:

    • mkdir /var/log/nginx/app1 -p

    • mkdir -p /var/www/html/app1/

    • ...


配置完成后,重加载nginx:nginx -s reload,后续的日志将会按照我们自定义的输出方式及存储方式运行。

Nginx的常用配置方法就差不多到这了。

完。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,864评论 6 494
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,175评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,401评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,170评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,276评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,364评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,401评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,179评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,604评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,902评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,070评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,751评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,380评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,077评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,312评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,924评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,957评论 2 351

推荐阅读更多精彩内容

  • nginx概述 nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、PO...
    逝者如斯灬阅读 3,411评论 0 16
  • 转载:http://www.cnblogs.com/crazylqy/p/7149774.html 一、 Ngin...
    SkTj阅读 499评论 0 0
  • nginx配置文件结构 从文件结构可知配置文件主要由一下六部分组成: main(全局设置) events(ngin...
    忘净空阅读 893评论 0 0
  • 我一直相信,每一个地方都是有味道的。 在我的记忆里,上黄庄是咸的。 清晨,是二瞎子家里成群结队的鸭子出圈,顺着村道...
    去看更远的海阅读 250评论 0 5
  • 开学至今,每天忙的连饭都不想做了,确实充实。本学期负责少年宫,少先队,各方面信息,同时还有最主要的,四年级数学课。...
    三门峡345赵艳阅读 174评论 0 0