一、Nginx是个什么东西?
我理解为,其实就是个反向代理服务器,客户端请求这个服务器,这个Nginx服务器接收到请求,
然后根据nginx.conf里面的配置文件,
将请求均匀的转发到对应的多个tomcat服务器(也就是所谓的负载均衡,用来减少服务器压力)。
二、什么是反向代理?反向代理可正向代理的区别是什么?
看这两张图就知道了:
我觉得区别就在于:
正向代理是客户端的行为(在客户端发送请求的时候,设置的正向代理,也就是代理的设置是在客户端完成的)
反向代理是客户端发送请求到反向代理服务器(比如Nginx服务器),由反向代理服务器完事代理转发请求。
三、nginx 文件结构
... #全局块
events { #events块
...
}
http #http块
{
... #http全局块
server #server块
{
... #server全局块
location [PATTERN] #location块
{
...
}
location [PATTERN]
{
...
}
}
server
{
...
}
... #http全局块
}
1、全局块:
配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,
日志存放路径,配置文件引入,允许生成worker process数等。
2、events块:
配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,
选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
3、http块:
可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。
如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
4、server块:
配置虚拟主机的相关参数,一个http中可以有多个server。
5、location块:
配置请求的路由,以及各种页面的处理情况。
四、一个最简单的反向代理/负载均衡/动静分离配置和解释:
//代表着当前有一个工作的子进程,可以自行修改,但是太多了无益因为会争夺cpu资源。一般最多设置成cpu数*核数
worker_processes 1;
//一般配置nginx的连接特性
events {
//这里是指一个子进程最大允许连接1024个连接
worker_connections 1024;
}
//这里是配置http服务器的主要段
http {
//这里配置的是日志的显示格式
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
//这里调用指定日志显示的格式
#access_log logs/access.log main;
upstream webservers { #这玩意我理解为节点集群,在这里设置多个地址端口
server 172.18.144.23:4789 weight=10; #weight:代表权重,数子越大访问的概率就越大
server 172.18.144.23:5789 weight=10;
}
server { #设置一个反向代理服务
listen 80; #端口是80
server_name test.nginx.com; #服务名是test.nginx.com
location / { #默认请求
root /root; #定义服务器的默认网站根目录位置
proxy_pass http://webservers; #这里就是设置反向代理的地方,指向upstream webservers节点组,实现负载均衡
}
location ~* \.(gif|jpg|jpeg|png|css|js|ico|svg)$ { #静态资源请求
root /nginx/sunpy_res/static/; #静态资源的根路径
}
# 所有动态请求都转发给tomcat处理
location ~ .(jsp|do)$ {
proxy_pass http://webservers;
}
error_page 502 503 =200 /50x.html; #产生502 、503的时候给用户的返回状态是200,内容是50x.html。
location = /50x.html {
root /usr/share/nginx/html;
}
}
}
五、location参数正则:
六、日志配置:
Nginx日志对于统计、系统服务排错很有用。
Nginx日志主要分为两种:access_log(访问日志)和error_log(错误日志)。
通过访问日志我们可以得到用户的IP地址、浏览器的信息,请求的处理时间等信息。
通过错误日志记录访问出错的信息,可以帮助我们定位错误的原因。
1、设置access_log
access_log 指令用来指定日志文件的存放路径(包含日志文件名)、格式和缓存大小。具体如下:
access_log path(存放路径) [format(自定义日志格式名称) [buffer=size | off]],比如:
access_log logs/access.log main;
开启访问日志:
先定义好格式:
log_format luo '$server_name $remote_addr - $remote_user [$time_local] "$request"'
'$status $uptream_status $body_bytes_sent "$http_referer"'
'"$http_user_agent" "$http_x_forwarded_for" '
'$ssl_protocol $ssl_cipher $upstream_addr $request_time $upstream_response_time';
在配置文件中http server或者location段中开启记录。
access_log logs/access.log luo;
2、error_log设置错误日志
错误日志主要记录客户端访问Nginx出错时的日志,格式不支持自定义。
通过错误日志,我们可以得到系统某个服务或server的性能瓶颈等。
因此,将日志好好利用,你可以得到很多有价值的信息。
错误日志由指令error_log来指定,具体格式:
error_log path(存放路径) level(日志等级)
path含义同access_log,level表示日志等级,具体如下:[ debug | info | notice | warn | error | crit ]
error_log logs/error.log info;
七、docker下安装部署一个nginx服务
我懒得写了,推荐大家看看这篇博客吧!这篇博客把docker安装配置启动挂载nginx服务讲得清清楚楚的
https://segmentfault.com/a/1190000015092063