安装
安装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_hash
、fair
、url_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变量
,自定义输出格式化的日志内容。
自定义日志
-
配置日志输出格式变量
在全局配置文件
/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"';
定义好的日志输出格式可在子级配置文件中按格式名使用。
- 配置应用子级日志
为了便于不同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的常用配置方法就差不多到这了。
完。