• Nginx配置文件


    目录

    一、前言

     二、配置nginx的配置文件

    Ⅰ、什么是反向代理?

    Ⅱ、用nginx实现反向代理

    Ⅲ、什么是负载均衡

    Ⅳ、配置负载均衡

    Ⅴ、动静分离

    Ⅵ、隐藏版本号

    一、前言

    nginx的配置文件位置处于*/nginx/conf/下,名为nginx.conf

    以下是nginx配置文件的主要结构:分为三大块:全局块,events块,http块

    全局块:

    从配置文件开始到events块开始之前的内容,都属于全局块,在全局块中配置的都是影响Nginx整体运行的配置。比如说:worker(工作进程)的数量,错误日志的位置等

    events块

    events块主要影响nginx服务器与⽤户的⽹络连接,⽐如worker_connections 1024,标识每个 workderprocess进程⽀持的最⼤连接数为1024


    http块

    http块是配置最频繁的部分,虚拟主机的配置,监听端⼝的配置,请求转发、反向代理、负载均衡 等

     本篇内容主要探讨在http块中设置反向代理和负载均衡功能的实现。

     二、配置nginx的配置文件

    Ⅰ、什么是反向代理?

     反向代理,指的是浏览器/客户端并不知道自己要访问具体哪台目标服务器,只知道去访问代理服务器 ,代理服务器再通过反向代理 +负载均衡实现请求分发到应用服务器的一种代理服务。
    反向代理服务的特点是代理服务器 代理的对象是应用服务器,也就是对于浏览器/客户端 来说应用服务器是隐藏的。

    Ⅱ、用nginx实现反向代理

    我们打开nginx的配置文件

    vim /usr/local/nginx/conf/nginx.conf

    如上文所说,我没找到http块下的server

    1. server {
    2. listen 80;
    3. server_name localhost;
    4. #监听端口80
    5. #charset koi8-r;
    6. #access_log logs/host.access.log main;
    7. location / {
    8. root html;
    9. index index.html index.htm;
    10. }
    11. #文件为nignx下的html的index.html和index.htm

    我们进行如下设置

    1. server {
    2. listen 80;
    3. server_name localhost;
    4. #charset koi8-r;
    5. #access_log logs/host.access.log main;
    6. location / {
    7. proxy_pass http://www.baidu.com
    8. # root html;
    9. # index index.html index.htm;
    10. }

    添加反向代理,注释掉原来的信息

    配置好配置文件,我们重启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地址需要加上端口号

    1. upstream https {
    2. server 192.168.116.120:80 weight=7;
    3. server 192.168.116.23:80 weight=3;
    4. server 192.168.116.25:80 weight=1 backup;
    5. }
    6. server {
    7. listen 80;
    8. server_name localhost;
    9. #charset koi8-r;
    10. #access_log logs/host.access.log main;
    11. location / {
    12. proxy_pass http://https;
    13. #root html;
    14. #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,不进行权重等其他配置,两台机器的内容分别为

    1. HI!!192.168.116.120
    2. HI!!192.168.116.23

    来到浏览器进行刷新

     可以发现,页面内容表示出两台机器在轮询显示,均衡了nginx的负载

    因为现在很多情况下都是集群部署,而且集群下的各个服务器资源大多都是不均匀的,资源高的则分配权重高一些,资源低的则分配权重低一些,这种情况使用基于权重的负载均衡算法,可以更高效的利用资源和提高并发处理能力,所以另四种算法在这里不做讨论。

    Ⅴ、动静分离

    适用于中小型的网站配置,将静态资源直接放在nginx服务器中,来达到加速的效果

    我们进入配置文件进行设置

    1. location /css {
    2. root html;
    3. index index.html index.htm;
    4. }
    5. location /js{
    6. root html;
    7. index index.html index.htm;
    8. }
    9. location /img {
    10. root html;
    11. index index.html index.htm;
    12. }
    13. 或者使用正则表达式:
    14. location ~*/(css|js|img) {
    15. root html;
    16. index index.html index.htm;
    17. }

    复制location,配置如上,并把相应的静态资源放在*/nginx/html/下,这样,当用户访问资源时,静态资源就不用再从后端的服务器出发经过nginx服务器传输过来了,提高了效率。

    Ⅵ、隐藏版本号

    查看版本号

    1. */nginx/sbin/nginx -v
    2. curl -i 192.168.116.22

     在网页上暴露nginx的版本号,不利于网站安全,为防止他人针对版本漏洞进行攻击,在浏览器打开nginx服务器,按F12就可以看到nginx的版本号,所以,我们要把它隐藏起来

    1. vim /usr/local/nginx/conf/nginx.conf
    2. http {
    3. include mime.types;
    4. default_type application/octet-stream;
    5. server_tokens off; #关闭

     版本信息就被我们隐藏了 

    还可以选择修改源码文件,重新进行安装的方式来自定义版本信息,修改下面双引号里的内容,再进行安装,也可以达到隐藏真实版本信息的目的。

    1. vim /opt/nginx-1.20.2/src/core/nginx.h
    2. define NGINX_VERSION "1.20.2" #修改版本号
    3. define NGINX_VER "nginx/" NGINX_VERSION #修改服务器类型

  • 相关阅读:
    Python 使用Scapy构造特殊数据包
    uni 结合vuex 编写动态全局配置变量 this.baseurl
    webpack proxy如何解决跨域?
    .NET Core Apollo 配置中心
    436. 寻找右区间--LeetCode_二分
    面经 | Go语言知识点
    mysql5.6安装---windows版本
    Python在工业自动化领域的应用详解
    本科阶段学习方向的建议
    使用python获取浏览器收藏夹和历史浏览记录,然后可以...
  • 原文地址:https://blog.csdn.net/m0_71518373/article/details/126342800