目录
nginx的配置文件位置处于*/nginx/conf/下,名为nginx.conf
以下是nginx配置文件的主要结构:分为三大块:全局块,events块,http块
全局块:
从配置文件开始到events块开始之前的内容,都属于全局块,在全局块中配置的都是影响Nginx整体运行的配置。比如说:worker(工作进程)的数量,错误日志的位置等
events块
events块主要影响nginx服务器与⽤户的⽹络连接,⽐如worker_connections 1024,标识每个 workderprocess进程⽀持的最⼤连接数为1024
http块
http块是配置最频繁的部分,虚拟主机的配置,监听端⼝的配置,请求转发、反向代理、负载均衡 等
本篇内容主要探讨在http块中设置反向代理和负载均衡功能的实现。
反向代理,指的是
浏览器/客户端
并不知道自己要访问具体哪台目标服务器
,只知道去访问代理服务器
,代理服务器
再通过反向代理 +负载均衡
实现请求分发到应用服务器
的一种代理服务。
反向代理服务的特点是代理服务器
代理的对象是应用服务器
,也就是对于浏览器/客户端
来说应用服务器
是隐藏的。
我们打开nginx的配置文件
vim /usr/local/nginx/conf/nginx.conf
如上文所说,我没找到http块下的server
- server {
- listen 80;
- server_name localhost;
- #监听端口80
- #charset koi8-r;
-
- #access_log logs/host.access.log main;
-
- location / {
- root html;
- index index.html index.htm;
- }
- #文件为nignx下的html的index.html和index.htm
我们进行如下设置
- server {
- listen 80;
- server_name localhost;
-
- #charset koi8-r;
-
- #access_log logs/host.access.log main;
-
- location / {
- proxy_pass http://www.baidu.com
- # root html;
- # index index.html index.htm;
- }
添加反向代理,注释掉原来的信息
配置好配置文件,我们重启nginx
nginx -s reload
原先我们在浏览器上访问这台nginx服务器,会出现以下页面
重启完成后我们刷新页面
网址名变成了www.baidu.com
负载均衡算法
常用的有轮询
、权重、
ip_hash、least_conn、url_hash、fair
算法
轮询:指定轮询server,原理是每一个请求按时间顺序逐一被分发到不同的应用服务器
权重:原理是每一个请求按权重被分发到不同的应用服务器
ip_hash:根据客户端的ip地址转发同一台服务器,可用保持会话
least_conn:最少连接访问
url_hash:
根据用户访问的url定向转发请求
fair:
根据后端服务器响应时间转发请求
Ⅳ、配置负载均衡
指定server时,ip地址需要加上端口号
- upstream https {
- server 192.168.116.120:80 weight=7;
- server 192.168.116.23:80 weight=3;
- server 192.168.116.25:80 weight=1 backup;
- }
- server {
- listen 80;
- server_name localhost;
-
- #charset koi8-r;
- #access_log logs/host.access.log main;
-
- location / {
- proxy_pass http://https;
- #root html;
- #index index.html index.htm;
注意upstream的位置,他和http块拥有相同级别
weight : 权重,默认为1,weight越大,负载的权重就越大
down:表示当前server不参与负载
backup:其他server正常运行时不进行负载,否则请求backup机器
max_fails:最大请求失败次数
fail_timeout:配合max_fails使用,表示在fail_timeout时间(s)内max_fails次就不再对该机器进行请求
一般来说,每一台server机器上的内容应该是一样的,这样才能保证想要访问的内容不会因为轮询机制出现差错,起到负载均衡的作用。
我们试一试只设置upstream里的server,不进行权重等其他配置,两台机器的内容分别为
- HI!!192.168.116.120
-
- HI!!192.168.116.23
来到浏览器进行刷新
可以发现,页面内容表示出两台机器在轮询显示,均衡了nginx的负载
因为现在很多情况下都是集群部署
,而且集群下的各个服务器资源大多都是不均匀的,资源高的则分配权重高一些,资源低的则分配权重低一些,这种情况使用基于权重
的负载均衡算法,可以更高效的利用资源和提高并发处理能力,所以另四种算法在这里不做讨论。
适用于中小型的网站配置,将静态资源直接放在nginx服务器中,来达到加速的效果
我们进入配置文件进行设置
- location /css {
- root html;
- index index.html index.htm;
- }
- location /js{
- root html;
- index index.html index.htm;
- }
- location /img {
- root html;
- index index.html index.htm;
- }
- 或者使用正则表达式:
- location ~*/(css|js|img) {
- root html;
- index index.html index.htm;
- }
复制location,配置如上,并把相应的静态资源放在*/nginx/html/下,这样,当用户访问资源时,静态资源就不用再从后端的服务器出发经过nginx服务器传输过来了,提高了效率。
查看版本号
- */nginx/sbin/nginx -v
- curl -i 192.168.116.22
在网页上暴露nginx的版本号,不利于网站安全,为防止他人针对版本漏洞进行攻击,在浏览器打开nginx服务器,按F12就可以看到nginx的版本号,所以,我们要把它隐藏起来
- vim /usr/local/nginx/conf/nginx.conf
-
- http {
- include mime.types;
- default_type application/octet-stream;
- server_tokens off; #关闭
版本信息就被我们隐藏了
还可以选择修改源码文件,重新进行安装的方式来自定义版本信息,修改下面双引号里的内容,再进行安装,也可以达到隐藏真实版本信息的目的。
- vim /opt/nginx-1.20.2/src/core/nginx.h
- define NGINX_VERSION "1.20.2" #修改版本号
- define NGINX_VER "nginx/" NGINX_VERSION #修改服务器类型