nginx 订阅
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。 展开全文
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
信息
软件类型
开源软件,网页服务器软件
最新生产版本
1.18.0 [1]
别    名
engine x
最新主线版本
1.19.1 [1]
中文名
nginx
软件许可
BSD许可
外文名
Nginx
兼容性
Linux系统,Windows NT系统,OS X
nginx优点
Nginx 可以在大多数 UnixLinux OS 上编译运行,并有 Windows 移植版。 Nginx 的1.4.0稳定版已经于2013年4月24日发布,一般情况下,对于新建站点,建议使用最新稳定版作为生产版本,已有站点的升级急迫性不高。 Nginx 的源代码使用 2-clause BSD-like license。Nginx 是一个很强大的高性能Web和反向代理服务,它具有很多非常优越的特性:在连接高并发的情况下,Nginx是Apache服务不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应,感谢Nginx为我们选择了 epoll and kqueue作为开发模型。Nginx作为负载均衡服务:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务对外进行服务。Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。处理静态文件,索引文件以及自动索引;打开文件描述符缓冲。无缓存的反向代理加速,简单的负载均衡和容错。FastCGI,简单的负载均衡和容错。模块化的结构。包括 gzipping, byte ranges, chunked responses,以及 SSI-filter 等 filter。如果由 FastCG或其它代理服务器处理单页中存在的多个 SSI,则这项处理可以并行运行,而不需要相互等待。支持 SSL 和 TLSSNI。 [2]  Nginx代码完全用C语言从头写成,已经移植到许多体系结构和操作系统,包括:Linux、FreeBSD、Solaris、Mac OS X、AIX以及Microsoft Windows。Nginx有自己的函数库,并且除了zlib、PCRE和OpenSSL之外,标准模块只使用系统C库函数。而且,如果不需要或者考虑到潜在的授权冲突,可以不使用这些第三方库。作为邮件代理服务:Nginx 同时也是一个非常优秀的邮件代理服务(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。Nginx 是一个安装非常的简单、配置文件非常简洁(还能够支持perl语法)、Bug非常少的服务。Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。
收起全文
精华内容
下载资源
问答
  • nginx 千次阅读
    2019-06-29 23:59:22

    常用命令

    nginx -s stop 直接干掉服务
    start nginx 启动服务
    nginx -s quit 优雅停止nginx,有连接时会等连接请求完成再杀死worker进程
    nginx -s reload 优雅重启,并重新载入配置文件nginx.conf
    nginx -s reopen 重新打开日志文件,一般用于切割日志
    nginx -v 查看版本
    nginx -t 检查nginx的配置文件
    nginx -h 查看帮助信息
    nginx -V 详细版本信息,包括编译参数
    nginx -c filename 运行时指定配置文件

    解压缩
    gzip on;  #开启和关闭gzip模式
    gzip_min_length 1024k;  #gizp压缩起点,文件大于1k才进行压缩
    gzip_comp_level 4; #压缩级别,1-9,数字越大压缩的越好,也越占用CPU时间
    
    #进行压缩的文件类型。
    gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
    
    #nginx对于静态文件的处理模块,开启后会寻找以.gz结尾的文件,直接返回,不会占用cpu进行压缩,如果找不到则不进行压缩
    gzip_static on;
    
    gzip_vary on; #是否在http header中添加Vary: Accept-Encoding,建议开启
    gzip_buffers 4 16k; #设置压缩所需要的缓冲区大小,以4k为单位,如果文件为7k则申请2*4k的缓冲区 
    gzip_http_version 1.1;  #设置gzip压缩针对的HTTP协议版本
    
    

    1、什么是代理服务器

    代理服务器,客户机在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器,代理服务接受客户机请求之后,再向主机发出,并接收目的主机返回的数据,存放在代理服务器的硬盘中,再发送给客户机。

    2、为什么要使用代理服务器
    1)提高访问速度
    2)防火墙作用
    3)通过代理服务器访问不能访问的目标站点

    正向代理、反向代理

    占有内存少,并发能力强
    多模块整合、实现复杂功能

    负载均衡

    负载均衡是对系统的高可用、网络压力的缓解和处理能力扩容的重要手段之一。我们通常所说的负载均衡都指的是服务端负载均衡,其中分为硬件负载均衡和软件负载均衡。硬件负载均衡主要通过在服务器节点之间按照专门用于负载均衡的设备,比如F5等;而软件负载均衡则是通过在服务器上安装一些用于负载均衡功能或模块等软件来完成请求分发工作,比如Nginx等。

    负载均衡具体实现有多种,有直接基于硬件的F5,有操作系统传输层(TCP)上的 LVS,也有在应用层(HTTP)实现的反向代理(也叫七层代理)。
    .
    下面简单介绍一下最后者——反向代理。

    在请求发送到真正处理请求的服务器之前,还需要将请求路由到适合的服务器上,一个请求被负载均衡器拿到之后,需要做一些处理,比如压缩请求(在nginx中gzip压缩格式是默认配置在nginx.conf内的,所以默认开启,如果不对数据量要求特别精细的话,默认配置完全可以满足基本需求)、接收请求(接收完毕后才发给Server,提高Server处理效率),然后根据预定的路由算法,将此次请求发送到某个后台服务器上。

    其中需要提到的一点是反向代理,先理解一下正向代理的原理:正向代理是将自己要访问的资源告诉Proxy,让Proxy帮你拿到数据返回给你,Proxy服务于Client,常用于番&墙和跨权限操作。反向代理也是将自己要访问的资源告诉Proxy,让Proxy帮你拿到数据返回给你,但是Proxy会将请求接受完毕之后发送给某一合适的Server,这个时候Client是不知道是根据什么规则并且也不知道最后是哪一个Server服务于它的且Proxy服务于Server,所以叫反向代理,常用于负载均衡、安全控制。

    安装 nginx-1.16.0

    Nginx安装使用:下载 nginx-1.16.0.zip
    官网版本 http://nginx.org/en/download.html

    卸载旧版
    完全卸载nginx的详细步骤 https://blog.csdn.net/weixin_38889300/article/details/106682750
    nginx 的启动、停止与重启  https://www.cnblogs.com/waynechou/p/7760251.html
    
    #查看nginx的版本信息
    rpm -qa | grep nginx 
    /usr/local/nginx/sbin/nginx -V
    
    # 停止nginx
    nginx -s stop  #强制停止nginx服务器,如果有未处理的数据,则丢弃
    nginx -s quit  #优雅的停止,有连接时会等连接请求完成再杀死worker进程 
    

    Nginx的端口和进程

    Windows下查看、杀掉Nginx的端口和进程

    netstat -ano|findstr 8001

    tasklist /fi “imagename eq nginx.exe”
    ps -ef|grep nginx 查看进程

    taskkill /f /t /im nginx.exe
    taskkill /f /pid 8001

    netstat查看进程端口

    netstat -ano|findstr 8080
    netstat -ano|findstr 0.0.0.0:8080
    在这里插入图片描述
    -a
    -n
    -o

    tasklist

    tasklist 得到当前进程的名字,PID,会话,内存使用情况
    tasklist /fi “imagename eq nginx.exe”
    在这里插入图片描述

    taskkill杀掉进程

    #根据服务名
    taskkill /f /im /f nginx.exe
    /im 立即
    /f 强制结束进程
    #根据pid
    taskkill /f /pid {pid}
    在这里插入图片描述
    taskkill /f /t /im nginx.exe

    刚开始乱点exe文件启动了3个Nginx导致,Nginx访问不了Tomcat,直接杀掉进程
    netstat -ano|findstr 8001
    tasklist /fi “imagename eq nginx.exe”
    ps -ef|grep nginx

    taskkill /f /pid 8001
    使用taskkill taskkill /f /t /im nginx.exe

    linux下批量删除进程(脚本)

    tail_pid=`ps -ef | grep "www-data" | grep -v grep | awk '{print $2}'`
    if [ -z "$tail_pid" ]; then
     echo "[ not find tail log pid ]"
    else
     echo "find result: $tail_pid "
     kill -9 $tail_pid
    fi
    
    

    其他

    Nginx请求转发Tomcat服务

    访问nginx代理服务器时跳转到云服务器,即通过proxy_pass 配置请求转发地址,输入http://localhost:8001 时,请求会跳转到配置的“云”服务器

    外网域名映射(花生壳)

    服务是用外网域名映射到本地虚拟机的Tomcat,模拟负载均衡。
    之前学习用花生壳外网IP映射本地服务,当前设置本机Windows与虚拟机Linux系统在不同网段,就假设一个在本地一个在云端。
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

    访问服务业务

    Nginx配置文件中下划线问题的坑,报错400,查找问题
    对header name的字符做了限制

    nginx反向代理无法获取带下划线的 HTTP Header解决办法
    https://zhaoshijie.iteye.com/blog/2371440

    负载均衡测试

    1.部署2台服务
    Linux虚拟服务:外网 2l5k085345.wicp.vip:39950,映射内网IP是192.168.236.128:8080
    Windows服务:内网 localhost:8008,IP是192.168.40.1:8008

    2.在upstream再添加一个本地Tomcat服务localhost:8008,不进行权重weight设置
    在这里插入图片描述
    3.访问nginx
    当访问nginx的8001时,nginx会将请求交替转发给这两台服务;
    配置多个目标服务器后,当一台服务器出现故障时,nginx能将请求自动转向另一台服务器。
    在这里插入图片描述

    权重weight设置后,提示配置文件错误(nginx-1.16)
    在这里插入图片描述

    更多相关内容
  • Nginx 跳转

    万次阅读 2021-11-14 09:05:56
    一.Nginx常见模块 1.http http块是Nginx服务器配置中的重要部分,代理、缓存和日志定义等绝大多数的功能和第三方模块的配置都可以放在这模块中。作用包括:文件引入、MIME-Type定义、日志自定义、是否使用sendfile...

    一.Nginx常见模块

    1.http

    http块是Nginx服务器配置中的重要部分,代理、缓存和日志定义等绝大多数的功能和第三方模块的配置都可以放在这模块中。作用包括:文件引入、MIME-Type定义、日志自定义、是否使用sendfile传输文件、连接超时时间、单连接请求数上限等。

    2.server

    server块,虚拟主机(虚拟服务器)。作用:使得Nginx服务器可以在同一台服务器上只要运行一组Nginx进程,就可以运行多个网站。

    3.location

    location块是server块的一个指令。作用:基于Nginx服务器接收到的请求字符串,虚拟主机名称(ip,域名)、url匹配,对特定请求进行处理。

    二.location

    1.一般分为普通和正则

    常用的正则表达式

    字符含义
    .匹配任意单个字符,可以是一个汉字
    ^行首锚定, 用于模式的最左侧
    $行尾锚定,用于模式的最右侧
    *匹配前面字符任意次(包括0次)
    ?0或1次
    +1次或多次(1次或以上)
    \转义符
    \d只匹配数字
    {n}重复n次
    {n,}至少n次(n次货以上)
    {n,m}n到m次
    [ ]定义匹配字符的范围,只匹配一次
    [c]单个字符
    [a-z]匹配任意小写字母
    [a-zA-Z0-9]匹配任意字母和数字
    ()表达式的开始和结束位置
    |或运算符a|b

    2.location 常用的匹配规则

    规则表达式规则含义
    =进行普通字符精确匹配。也就是完全匹配
    ^~表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其他 location
    ~表示执行一个正则匹配,区分大小写
    ~*表示执行一个正则匹配,不区分大小写
    !~表示执行一个正则匹配,区分大小写不匹配
    !~*表示执行一个正则匹配,不区分大小写不匹配

    3.location 示例

    1)精确匹配

    location = / {}
    =为精确匹配 / , 主机名后不能携带任何字符串,比如 / 和 /data ,则/匹配,/data不匹配
    

    2)一般匹配/通用匹配

    location  / {}
    代表已/开头,所以这条规则将匹配所有的请求  
    
    location  /documents/ {}
    匹配任何已/documents/开头的地址,匹配符合后,还会继续往下搜索其他 location,只有其它location后面的正则表达式没有匹配到时,才会用这一条
    
    
    1. 正则匹配
    location ^~ /images/ {} 
    匹配任何已/images/ 开头的地址,匹配符合后,停止往下搜索,采用这一条
    
    
    location ~* \.(gif|jpg|jpeg)$ {} 
    匹配所有 gif jpg 或 jepg 结尾的请求
    如果 有上面的location ^~ /images/ {}匹配  则会先匹配上一请求,所以到不了这一条。
    

    4.location优先级排列说明

    1. 等号类型(=)的优先级最高。一旦匹配成功,则不再查找其他匹配项。
    2. ^~类型表达式。一旦匹配成功,则不再查找其他匹配项。
    3. 正则表达式类型(*)的优先级次之。常规字符串匹配类型(不带任何修饰符的匹配),按前缀匹配。/test
    4. 通用匹配(/),如果没有其它匹配,任何请求都会匹配到。

    location 优先级总结
    如果是匹配路径:
    (location = 完整路径) > (location ^~ 完整路径) > (location ~* 完整路径) >(location ~ 完整路径) > (location /)通用匹配
    用目录做匹配访问某个文件
    (location =目录)>(location~目录/)> (location~目录)>(location ~*目录)>(location目录)>(location /)

    [root@localhost conf]# vim nginx.conf
    [root@localhost conf]# pwd
    /usr/local/nginx/conf
    
    

    在这里插入图片描述
    增加
    在这里插入图片描述

    [root@localhost conf]# mkdir -p /wuqi/plane
    [root@localhost conf]# vim /wuqi/plane/index.html
    
    

    在这里插入图片描述
    但是打开主页仍然不是我们想要的页面
    在这里插入图片描述
    所以证实了在精准匹配没加后缀前级别还不如普通匹配

    [root@localhost wuqi]# vim /usr/local/nginx/conf/nginx.conf
    
    

    在这里插入图片描述
    在这里插入图片描述
    重启服务后

    [root@localhost wuqi]# nginx -t
    nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
    [root@localhost wuqi]# service nginx restart
    
    

    在域名后加上后缀,精准匹配就生效了,而不再是主页了
    在这里插入图片描述
    实际网站使用中,至少有三个匹配规则定义

    第一个规则
    直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,比如说官网。
    可以是一个静态首页,也可以直接转发给后端应用服务器
    第二个规则
    是处理静态文件请求,这是nginx作为http服务器的强项有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
    第三个规则
    就是通用规则,比如用来转发带.php、.jsp后缀的动态请求到后端应用服务器。

    三.REWRITE模块

    现在 Nginx 已经成为很多公司作为前端反向代理服务器的首选,在实际工作中往往会
    遇到很多跳转(重写 URL)的需求。比如更换域名后需要保持旧的域名能跳转到新的域名
    上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求。如果在后端使用的 Apache
    服务器,虽然也能做跳转,规则库也很强大,所以用 Nginx 跳转效率会更高。

    1.功能

    rewrite功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标记位实现URL重写以及重定向。比如:更换域名后需要保持旧的域名能跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求
    rewrite 只能在
    server {}
    location {}
    if {}
    中,并且默认只能对域名后边的除去传递的参数外的字符串起作用

    2.跳转场景

    Rewrite 跳转场景主要包括以下几种

    1. 可以调整用户浏览的 URL,看起来更规范,合乎开发及产品人员的需求
    2. 为了让搜索引擎搜录网站内容及用户体验更好,企业会将动态 URL 地址伪装成静态地址提供服务
    3. 网址换新域名后,让旧的访问跳转到新的域名上。例如,访问京东的 360buy.com会跳转到 jd.com
    4. 根据特殊变量、目录、客户端的信息进行 URL 调整等。

    3.跳转实现

    Nginx 是通过 ngx_http_rewrite_module 模块支持 url 重写、支持 if 条件判断,但不支
    持 else。
    另外该模块需要 PCRE 支持,应在编译 Nginx 时指定 PCRE 支持,默认已经安装。
    根据相关变量重定向和选择不同的配置,从一个 location 跳转到另一个 location,不过这样
    的循环最多可以执行 10 次,超过后 Nginx 将返回 500 错误。
    同时,重写模块包含 set 指令,来创建新的变量并设其值,这在有些情景下非常有用的,如记录条件标识、传递参数到其他location、记录做了什么等等。

    4.执行顺序

    rewrite执行顺序如下:

    1. 执行server块里面的rewrite指令。
    2. 执行location 匹配。
    3. 执行选定的location中的rewrite指令。

    5.语法格式

    rewrite <regex> <replacement> [flag];
    regex:表示正则匹配规则
    replacement:表示跳转后的内容
    flag:表示rewrite 支持的 flag 标记

    flag 标记说明:
    last:本条规则匹配完成后,继续向下匹配新的location URL规则,一般用在server和if中
    break:本条规则匹配完成即终止,不再匹配后面的任何规则。一般用在location中
    redirect:返回 302 临时重定向,浏览器地址会显示跳转后的 URL 地址,爬虫不会更新 url(因为是临时)。
    permanent:返回 301 永久重定向,浏览器地址栏会显示跳转后的 URL 地址,爬虫更新 url。

    6.实例

    6.1域名跳转

    从一个网址跳转至另一个域名

    [root@localhost ~]# cd /usr/local/nginx/html
    [root@localhost html]# mkdir zy
    root@localhost html]# ls
    123.png  50x.html  index.html  zy
    [root@localhost html]# cd zy
    [root@localhost zy]# vim index.html
    
    

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    打开客户机

    [root@www ~]# vim /etc/hosts
    
    

    在这里插入图片描述
    打开浏览器,输入“www.zy.com”
    在这里插入图片描述
    但是网页打开的却是“www.fxy.com”
    在这里插入图片描述

    6.2基于客户端IP 访问跳转

    输入IP地址进行跳转到目标地址

    [root@localhost ~]# cd /usr/local/nginx/conf
    [root@localhost conf]# vim nginx.conf
    
    

    在这里插入图片描述

    在这里插入图片描述
    创建一个页面

    [root@localhost nginx]# cd /usr/local/nginx/html
    [root@localhost weihu]# vim weihu.html
    
    

    在这里插入图片描述
    打开客户端,输入“192.168.133.100”或者“www.zy.com”
    在这里插入图片描述
    在这里插入图片描述

    6.3基于旧域名跳转到新域名后面加目录

    在原目标地址中间增加一个目录

    [root@localhost ~]# cd /usr/local/nginx/conf
    [root@localhost conf]# vim nginx.conf
    
    

    在这里插入图片描述
    在这里插入图片描述

    [root@localhost conf]# cd /usr/local/nginx/html/
    [root@localhost html]# mkdir -p bbs/luntan
    [root@localhost html]# ls
    123.png  50x.html  bbs  index.html
    [root@localhost html]# cd bbs
    [root@localhost bbs]# ls
    luntan
    [root@localhost bbs]# cd luntan/
    [root@localhost luntan]# vim test.html
    
    

    在这里插入图片描述

    [root@localhost luntan]# nginx -t
    nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
    [root@localhost luntan]# service nginx restart
    
    

    开启客户端 在网页里输入“www.zy.com/luntan”
    在这里插入图片描述
    会跳到新地址
    在这里插入图片描述

    6.4基于参数匹配的跳转

    匹配参数可以直接跳转

    [root@localhost ~]# cd /usr/local/nginx/conf/
    [root@localhost conf]# vim nginx.conf
    
    

    在这里插入图片描述
    在这里插入图片描述

    开启客户端
    输入网址这里200后的数可以随便输入任意数
    在这里插入图片描述
    跳转至主页
    在这里插入图片描述

    6.5基于目录下所有的php文件

    只要是.php结尾的都可以跳转主页

    [root@localhost ~]# cd /usr/local/nginx/conf/
    [root@localhost conf]# vim nginx.conf
    
    

    在这里插入图片描述
    在这里插入图片描述
    打开客户端
    输入网址后加上“upload…/.php"结尾
    在这里插入图片描述
    网页会自动跳转到主页
    在这里插入图片描述

    6.6基于普通的一条url

    从目标地址跳转至主页

    [root@localhost ~]# cd /usr/local/nginx/conf
    [root@localhost conf]# vim nginx.conf
    

    在这里插入图片描述
    在这里插入图片描述

    [root@localhost conf]# nginx -t
    nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
    [root@localhost conf]# service nginx restart
    
    

    开启客户端
    输入www.zy.com/abc/123.html
    在这里插入图片描述
    跳至主页
    在这里插入图片描述

    展开全文
  • Nginx配置

    千次阅读 2022-02-25 20:47:01
    Nginx配置一、nginx常用配置命令二、nginx配置文件(一)、第一部分:全局块(二)、第二部分:events块(三)、第三部分:http块1、http全局块2、server块三级目录 一、nginx常用配置命令 配置命令路径 /usr/local/...

    一、nginx常用配置命令

    配置命令路径

    /usr/local/nginx/sbin
    

    查看nginx版本

    ./nginx -v
    

    停止nginx服务

    ./nginx -s stop
    

    启动nginx服务

    ./nginx
    

    重新加载nginx,适用于当nginx.conf配置文件修改后,使用下面命令可以使得配置文件生效

    ./nginx -s reload
    

    查看nginx服务是否运行

    netstat -ntlp
    

    在这里插入图片描述

    二、nginx配置文件

    由三部分组成

    (一)、第一部分:全局块

    nginx服务器全局生效的配置命令

    worker_processes  1;   # 服务器并发处理能力,值越大并发能力越强(受自身配置限制)
    

    (二)、第二部分:events块

    影响nginx和用户网络的连接

    worker_connections  1024;  #最大连接数1024个,需灵活配置
    

    (三)、第三部分:http块

    nginx配置最频繁的部分,比如代理,日志,缓存、第三方模块等等。
    需要注意的是http块可以包括http全局块和server块

    1、http全局块

    包括文件引入、MIME-TYPE定义,日志自定义、连接超时等等

    http {
        include       mime.types;      #文件扩展名与文件类型映射表
        default_type  application/octet-stream;  # 访问到未定义的扩展名的时候,就默认为下载该文件
    

    2、server块

    与虚拟主机有密切关系,主要是为了节省硬件成本
    一个http块可以包含多个server块,而一个server块就等于一个虚拟主机
    server块又包含全局server块和location块
    全局server块

    server {
        listen       8012;       #  目前监听的端口号
        server_name  localhost;  # 主机名称
    

    3、location块

       location / {     #表示默认首页
                root   html;
                index  index.html index.htm;
    

    三、nginx配置反向代理

    (一)、预计实现的效果

    1、访问URL http://www.giunwr.cn:8012/xxx(不包括下面2种情况) 内部跳转到tomcat服务器8080端口
    2、访问http://www.giunwr.cn:8012/8080/xxx 内部跳转到 http://www.giunwr.cn:8080/xxx
    3、访问 http://www.giunwr.cn:8012/8081/xxx 内部跳转到 http://www.giunwr.cn:8081/xxx

    (二)、前期准备

    安装tomcat服务(需要安装2个,一个8080端口,一个8081端口)
    下载tomcat,如果链接404,就到官网下再找个

    wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.16/bin/apache-tomcat-10.0.16.tar.gz
    

    在这里插入图片描述

    安装过程

    tar -zxvf  apache-tomcat-10.0.16.tar.gz # 解压
    cd apache-tomcat-10.0.16  # 进入tomcat主目录
    cd bin  # 进入bin目录
    ./startup.sh   # 启动tomcat服务
    

    在这里插入图片描述
    如果jdk报错
    安装命令如下

    yum -y install java-1.8.0-openjdk*
    

    在这里插入图片描述

    查看tomcat服务是否正常运行

    cd logs/        #   进入日志路径
    tail -f catalina.out    # 查看 tomcat运行日志
    

    在这里插入图片描述
    内网环境测试
    可以正常访问
    在这里插入图片描述
    外网环境测试
    emmm, 忘记开防火墙了(放行8080端口)
    在这里插入图片描述
    放行8080端口后,
    访问URL http://www.giunwr.cn:8012
    外网测试成功
    在这里插入图片描述
    修改tomcat默认端口
    修改配置文件server.xml

    apache-tomcat-10.0.16/conf   # 配置文件路径
    

    在这里插入图片描述
    在这里插入图片描述
    测试文件的准备
    在webapps目录下创建相关的html文件
    在这里插入图片描述

    (三)、实现反向代理

    修改nginx.conf文件

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

    其中 ~ 表示正则匹配,优先级高于/
    在这里插入图片描述

    修改好后记得重新加载配置文件

     ./nginx -s reload
    

    在没有防火墙的情况下访问成功
    在这里插入图片描述
    关闭防火墙,再进行测试
    直接访问8080端口直接报错
    在这里插入图片描述
    访问8012端口,访问成功,说明这个命令只是在服务器内部做代理,并没有走公网。

    proxy_pass http://127.0.0.1:8080
    

    在这里插入图片描述
    访问http://www.giunwr.cn:8012/8080/xxx 内部跳转到 http://www.giunwr.cn:8080/xxx

    在这里插入图片描述
    访问 http://www.giunwr.cn:8012/8081/xxx 内部跳转到 http://www.giunwr.cn:8081/xxx
    在这里插入图片描述

    四、nginx配置负载均衡

    (一)、预期效果

    浏览器输入地址http://www.giunwr.cn:8012/test/a.html,大概平均分配到8080和8081端口的tomcat服务器,实现负载均衡。
    默认分配测试是轮询

    (二)、前期准备

    1、准备2台tomcat服务,一个端口为8080,一个端口为8081
    2、2台服务器都需要在webapps目录下创建目录test,并在目录test里面创建a.html

    (三)、实现功能

    修改nginx配置文件
    在http块中修改

    upstream myserver {
        server 127.0.0.1:8080;
    server 127.0.0.1:8081;
    }
    server {
        listen       8012;
        server_name  localhost;
        location / {
            root   html;
        proxy_pass http://myserver;
            i
    

    在这里插入图片描述
    其中upstream在http块里面。myserver为自定义的名称
    多访问几次URLhttp://www.giunwr.cn:8012/test/a.html,可以发现几乎是8080的tomcat服务和8081的tomcat服务器之间来回访问

     for ((i=1;i<5;i++));do curl  'http://www.giunwr.cn:8012/test/a.html' ;done
    

    在这里插入图片描述

    (四)、负载均衡的分配策略

    1、轮询(默认就是这种策略)

    按请求时间逐一分配,如果某个服务器挂了,就自动剔除

    2、weight(权重)

    默认weight值是1,值越大表示权重越大,分配到的几率也就越大
    当后端服务器性能不均时候,可以考虑该策略
    示例

    upstream myserver {
        server 127.0.0.1:8080 weight=5;
    	server 127.0.0.1:8081 weight=10;
    }
    

    3、ip_hash

    每个请求按访问ip的hash结果分配,这样子访客固定访问一个后端服务器,可以解决session问题
    举个例子:
    A用户固定ip,第一次访问到8080tomcat,那么后面就都是访问到这台机器
    示例

    upstream myserver {
        ip_hash;
        server 127.0.0.1:8080;
    	server 127.0.0.1:8081;
    }
    

    4、fair(第三方)

    根据后端响应时间来分配请求,需要时间短的优先分配
    示例
    示例

    upstream myserver {
        server 127.0.0.1:8080;
    	server 127.0.0.1:8081;
    	fair;
    }
    

    五、nginx配置动静分离

    (一)、预期效果

    nginx适合处理静态界面(或者说静态请求),
    tomcat适合处理动态界面(或者说动态请求)
    动静分离的方式:
    1、静态文件一个域名,放在独立的服务器中
    2、混合发布,使用nginx分离
    通过location指定不同后缀名实现不同的请求和转发。比如expires头部,用于设置过期时间

    这边使用第一种方案

    (二)、前期准备

    准备静态资源
    在这里插入图片描述

    (三)、配置与实现

    配置

    location /www/ {
        root   /data/;
        index  index.html index.htm;
    }
    location /txt/ {
            root   /data/;
            # 列出当前目录的下的资源
            autoindex  on;
        }
    

    在这里插入图片描述
    实现效果
    在这里插入图片描述
    在这里插入图片描述

    六、第三方模块stub_status安装

    (一)、安装步骤

    1、查看是安装该模块(默认不安装)需要进入nginx目录下的sbin目录

    [sbin]# ./nginx -V 2>&1|grep stub_status
    

    如果内容为空,即没有安装
    3、查看当前已经安装的模块

    ./nginx -V
    

    在这里插入图片描述在这里插入图片描述

    4、重新配置参数
    在原来的参数基础上加上 with-http_stub_status_module

    ./configure --prefix=/usr/local/nginx --pid-path=/var/local/nginx/nginx.pid --lock-path=/var/local/nginx/nginx.lock --error-log-path=/var/local/nginx/error.log --http-log-path=/var/local/nginx/access.log --with-http_gzip_static_module --with-http_stub_status_module --http-client-body-temp-path=/var/local/nginx/client --http-proxy-temp-path=/var/local/nginx/proxy --http-fastcgi-temp-path=/var/local/nginx/fastcgi --http-uwsgi-temp-path=/var/local/nginx/uwsgi --http-scgi-temp-path=/var/local/nginx/scgi
    

    在这里插入图片描述
    5、做好备份

    cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
    

    6、重新编译
    注意只需要编译即可

    make
    

    7、替换掉原来的二进制nginx文件
    在nginx安装目录下的objs目录里面

    cp /root/wr/nginx-1.20.2/objs/nginx /usr/local/nginx/sbin/
    

    (二)、配置与实现

    1、配置简单的监控功能
    在server块里面写入下面配置命令

    location /nginx_status {
            stub_status;
            allow all;
    }
    

    在这里插入图片描述
    2、重新启动nginx

    ./nginx -s reload
    

    3、实现效果
    访问http://主机地址/nginx_status即可
    在这里插入图片描述
    参数参考文档
    active connections – 活跃的连接数量
    server accepts handled requests — 总共处理了xxx个连接 , 成功创建xxx次握手, 总共处理了xxx个请求
    reading — 读取客户端的连接数.
    writing — 响应数据到客户端的数量
    waiting — 开启 keep-alive 的情况下,这个值等于 active – (reading+writing), 意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接.

    (三)、遇到的问题

    1、无法替换二进制nginx文件
    在这里插入图片描述
    原因是nginx服务器还在运行,需要停止nginx

    ./nginx -s stop
    

    2、重新加载nginx报错
    nginx: [error] open() “/usr/local/nginx/logs/nginx.pid” failed (2: No such file or directory)
    在这里插入图片描述
    解决办法,重新指定一下nginx配置文件

    ./nginx -c /usr/local/nginx/conf/nginx.conf
    

    在这里插入图片描述

    七、nginx压缩模块

    在http模块里面开启压缩

    gzip  on;    #开启压缩响应
    gzip_http_version 1.1;  # 只针对http1.1进行压缩
    gzip_comp_level 9;      # 压缩等级为9
    gzip_types text/plain;  # 压缩类型为文本
    

    其他具体参数可以参考文档
    参考文档:https://www.jb51.net/article/146413.htm

    展开全文
  • Nginx 服务详解

    万次阅读 2021-10-03 11:13:54
    Nginx 是 lgor Sysoev 为俄罗斯访问量第二的 rambler.ru 站点设计开发的。从 2004 年发布至今,凭借开源的力量,已经接近成熟与完善。Nginx 功能丰富,可作为 HTTP 服务器,也可作为反向代理服务器,邮件服务器。...


    前言

      Nginx 是 lgor Sysoev 为俄罗斯访问量第二的 rambler.ru 站点设计开发的。从 2004 年发布至今,凭借开源的力量,已经接近成熟与完善。Nginx 功能丰富,可作为 HTTP 服务器,也可作为反向代理服务器,邮件服务器。支持 FastCGI、SSL、Virtual Host、URL Rewrite、Gzip 等功能,并且支持很多第三方的模块扩展。

    1. Nginx 概述

    1.1 nginx 特点

    nginx 是一款高性能、轻量级的 web 服务软件,具有以下特点:

    • 稳定性高
    • 系统资源消耗低
    • 对 HTTP 并发连接的处理能力高(单台物理服务器可支持 30000~50000 个并发请求)

    1.2 nginx 与 apache 的差异

    nginx 是一个基于事件的 web 应用,apache 是一个基于流程的应用
    nginx 所有请求都由一个线程处理,apache 单个线程处理单个请求
    nginx 避免子进程的概念,apache 是基于子进程的
    nginx 在内存消耗和连接方面更好,apache 在内存消耗和连接方面一般
    nginx 的性能和可伸缩性不依赖于硬件,apache 依赖于 CPU 和内存等硬件
    nginx 支持热部署,apache 不支持热部署
    nginx 对于静态文件处理具有更高效率,apache 相对一般
    nginx 在反向代理场景具有明显优势,apache 相对一般

    在这里插入图片描述
    nginx Andrew Alexeev

    2. Nginx 编译安装与服务控制

    2.1 编译安装过程

    安装前准备

    systemctl stop firewalld && systemctl disable firewalld
    setenforce 0
    iptables -F
    yum -y install epel-release && yum clean all && yum makecache
    

    安装软件包

    yum -y install pcre-devel zlib-devel gcc gcc-c++ make wget
    

    创建运行用户、组

    # nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限
    useradd -M -s /sbin/nologin nginx
    

    下载安装包

    #版本自选
    wget http://nginx.org/download/nginx-1.12.2.tar.gz -P /opt
    

    编译安装 nginx

    tar xf /opt/nginx-1.12.2.tar.gz -C /opt/
    cd /opt/nginx-1.12.2
    
    ./configure \
    --prefix=/usr/local/nginx \		#指定 nginx 的安装路径
    --user=nginx \					#指定用户名
    --group=nginx \					#指定组名
    --with-http_stub_status_module	#启用 http_stub_status_module 模块以支持状态统计
    
    make -j 4 && make install 
    ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/	#优化路径,让系统识别 nginx 的操作命令
    

    启动 nginx

    nginx	#我们做了软连接到系统路径,执行 nginx 可直接启动 nginx
    

    2.2 nginx 服务控制

    检查、启动、重启、停止 nginx 服务

    ###检查配置文件是否正确
    nginx -t	
    
    ###启动
    nginx		
    
    ###停止
    cat /usr/local/nginx/logs/nginx.pid		#存放 nginx 进程号的文件
    
    kill -3 <进程号>
    kill -s QUIT <进程号>
    killall -3 nginx
    killall -s QUIT nginx 
    
    ###重载
    kill -1 <进程号>
    kill -s HUP <进程号>
    killall -1 nginx
    killall -s HUP nginx
    
    ###日志分隔,重新打开日志文件
    kill -USR1 <进程号>
    
    ###平滑升级
    kill -USR2 <进程号>
    

    2.3 nginx 注册系统服务

    方法一:适用于 Centos 6

    cat > /etc/init.d/nginx <<EOF
    #!/bin/bash
    #chkconfig: - 99 20
    #description:Nginx Service Control Script
    COM="/usr/local/nginx/sbin/nginx"
    PID="/usr/local/nginx/logs/nginx.pid"
    case "$1" in
    start)
      $COM
    ;;
     
    stop)
      kill -s QUIT $(cat $PID)
    ;;
     
    restart)
      $0 stop
      $0 start
    ;;
     
    reload)
      kill -s HUP $(cat $PID)
    ;;
     
    *)
    echo "Usage:$0 {start|stop|restart|reload}"
      exit 1
     
    esac
    exit 0
    EOF
    
    chmod +x /etc/init.d/nginx
    chkconfig --add nginx         #添加为系统服务
    systemctl stop nginx
    systemctl start nginx
    

    方法二:适用于 Centos 7

    #注意:如果先去使用 nginx 启动了服务需要先杀掉进程,不然会冲突
    cat > /usr/lib/systemd/system/nginx.service <<EOF
    [Unit]
    Description=nginx
    After=network.target
    [Service]
    Type=forking
    PIDFile =/usr/local/nginx/logs/nginx.pid
    ExecStart=/usr/local/nginx/sbin/nginx
    ExecrReload=/bin/kill -s HUP $MAINPID
    ExecrStop=/bin/kill -s QUIT $MAINPID
    PrivateTmp=true
    [Install]
    WantedBy=multi-user.target
    EOF
    
    chmod 754 /usr/lib/systemd/system/nginx.service		#设置 754 权限是一种安全优化
    systemctl daemon-reload
    systemctl start nginx.service && systemctl enable nginx.service
    

    2.4 一键编译安装脚本

    #!/bin/bash
    iptables -F
    yum -y install epel-release && yum clean all && yum makecache
    yum -y install pcre-devel zlib-devel gcc gcc-c++ make wget
    useradd -M -s /sbin/nologin nginx
    wget http://nginx.org/download/nginx-1.12.2.tar.gz -P /opt
    tar zxvf /opt/nginx-1.12.2.tar.gz -C /opt
    cd /opt/nginx-1.12.2
    
    ./configure \
    --prefix=/usr/local/nginx \
    --user=nginx \
    --group=nginx \
    --with-http_stub_status_module
    
    cd /opt/nginx-1.12.2
    make -j 4 && make install
    ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
    
    cat > /usr/lib/systemd/system/nginx.service <<EOF
    [Unit]
    Description=nginx
    After=network.target
    [Service]
    Type=forking
    PIDFile =/usr/local/nginx/logs/nginx.pid
    ExecStart=/usr/local/nginx/sbin/nginx
    ExecrReload=/bin/kill -s HUP $MAINPID
    ExecrStop=/bin/kill -s QUIT $MAINPID
    PrivateTmp=true
    [Install]
    WantedBy=multi-user.target
    EOF
    
    chmod 754 /usr/lib/systemd/system/nginx.service
    systemctl daemon-reload && systemctl start nginx.service && systemctl enable nginx.service
    
    echo " "
    pgrep "nginx" &> /dev/null
    if [ $? -eq 0 ];then
            echo -e "\033[32mnginx服务运行正常,可 curl 查看\033[0m"
    else
            echo -e "\033[31mnginx服务运行异常,请检查\033[0m"
    fi
    

    3. Nginx 配置文件

    3.1 nginx.conf 概述

    结构图一
    在这里插入图片描述
    结构图二
    在这里插入图片描述
    主配置文件内容

    [root@c7-1 ~]#cat /usr/local/nginx/conf/nginx.conf
    
    #user  nobody;
    worker_processes  1;
    
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    
    #pid        logs/nginx.pid;
    
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        #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;
    
        sendfile        on;
        #tcp_nopush     on;
    
        #keepalive_timeout  0;
        keepalive_timeout  65;
    
        #gzip  on;
    
        server {
            listen       80;
            server_name  localhost;
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            location / {
                root   html;
                index  index.html index.htm;
            }
    
            #error_page  404              /404.html;
    
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    
            # proxy the PHP scripts to Apache listening on 127.0.0.1:80
            #
            #location ~ \.php$ {
            #    proxy_pass   http://127.0.0.1;
            #}
    
            # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
            #
            #location ~ \.php$ {
            #    root           html;
            #    fastcgi_pass   127.0.0.1:9000;
            #    fastcgi_index  index.php;
            #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            #    include        fastcgi_params;
            #}
    
            # deny access to .htaccess files, if Apache's document root
            # concurs with nginx's one
            #
            #location ~ /\.ht {
            #    deny  all;
            #}
        }
    
    
        # another virtual host using mix of IP-, name-, and port-based configuration
        #
        #server {
        #    listen       8000;
        #    listen       somename:8080;
        #    server_name  somename  alias  another.alias;
    
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
    
    
        # HTTPS server
        #
        #server {
        #    listen       443 ssl;
        #    server_name  localhost;
    
        #    ssl_certificate      cert.pem;
        #    ssl_certificate_key  cert.key;
    
        #    ssl_session_cache    shared:SSL:1m;
        #    ssl_session_timeout  5m;
    
        #    ssl_ciphers  HIGH:!aNULL:!MD5;
        #    ssl_prefer_server_ciphers  on;
    
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
    
    }
    

    3.2 nginx.conf 模块详解

    (1) 全局模块

      配置影响 nginx 全局的指令。一般有运行 nginx 服务器的用户组,nginx 进程 pid 存放路径,日志存放路径,配置文件引入,允许生成 worker process 数等。

    user nobody;				#运行用户,若编译时未指定则默认为 nobody
    worker_processes 1;			#工作进程数量,可配置成服务器内核数 * 2,如果网站访问量不大,一般设为 1 就够用了
    #eror_log logs/error.log;	#错误日志文件的位置
    #pid logs/nginx.pid;		# PID 文件的位置
    

    (2) events 模块

      配置影响 nginx 服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。

    events {
        use epoll;	#使用 epoll 模型,2.6 及以上版本的系统内核,建议使用 epoll 模型以提高性能
        worker_connections 4096;	#每个进程处理 4096 个连接
    }
    
    • 如提高每个进程的连接数还需执行 “ulimit -n 65535” 命令临时修改本地每个进程可以同时打开的最大文件数
    • 在 Linux 平台上进行高并发 TCP 连接处理时,最高的并发数最都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个 TCP 连接都要创建一个 socket 句柄,每个 socket 句柄同时也是一个文件句柄)
    • 可使用 ulimit -a 命令查看系统允许当前用户进程打开的文件数限制

    (3) HTTP 模块

      可以嵌套多个 server,配置代理、缓存、日志定义等绝大多数功能和第三方模块的配置。如文件引入、mime-type定义、日志自定义、是否使用 sendfile 传输文件、连接超时时间、单连接请求数等。

    http {
        ##文件扩展名与文件类型映射表
        include     mime.types;
        ##默认文件类型
        default_type  application/octet-stream;
        ##日志格式设定
        #log_format  main   '$remote_ addr - $remote. user [stime_ local] "$request" '
        #                   '$status $body_ bytes_ sent "Shttp_ referer" '
        #                   "$http_user_agent" "$http_x_forwarded_for"';
        ##访问日志位置
        #access_Log logs/access.log main;
        #支持文件发送(下载) 
        sendfile    on;
        ##此选项允许或禁止使用socket的TCP_CORK的选项( 发送数据包前先缓存数据),此选项仅在使用sendfile的时候使用
        #tcp_nopush        on;
        ##连接保持超时时间,单位是秒
        #keepalive_timeout  0;
        keepalive.timeout  65;
        ##gzip模块设置,设置是否开启gzip压缩输出
        #gzip   on; 
    
        #Web服务的监听配置
        ##Web服务的监听配置
        server (
            ##监听地址及端口
            listen 80;
            ##站点域名,可以有多个,用空格隔开
            server.name www.xcf.com;
            ##网页的默认字符集
            charset utf-8;
            ##根目录配置
            location / {
                ##网站根目录的位置/usr/local/nginx/html
                root html;
                ##默认首页文件名
                index index.html index.php;
            }
            ##内部错误的反馈页面
            error_page 500 502 503 504 /50x.html;
            #错误页面配置
            location = /50x.html {
                root html;
            }
        }
    }
    

    ① 日志格式设定

    日志格式设定:
    $remote_addr$http_x_forwarded_for 用以记录客户端的ip地址;
    $remote_user: 用来记录客户端用户名称;
    $time_local: 用来记录访问时间与时区;
    $request: 用来记录请求的 url 与 http 协议;
    $status: 用来记录请求状态码,成功是 200;
    $body_bytes_sent: 记录发送给客户端文件主体的内容大小;
    $http_referer: 用来记录从哪个页面链接访问过来的;
    $http_user_agent: 记录客户端浏览器的相关信息;
    
    • 通常 web 服务器放在反向代理的后面,这样就不能获取到客户的 IP 地址了,通过 $remote_add 拿到的 IP 地址是反向代理服务器的 IP 地址
    • 反问代理服务器在转发请求的 http 头信息中,可以增加 x_forwarded_for 信息,用以记录原客户端的 IP 地址和原客户端的请求的服务器地址

    ② location 配置

    常见配置指令:root、alias、proxy_pass

    root(根路径配置)
    #请求 www.test.com/test/1.jpg,会返回文件 /usr/local/nginx/html/test/1.jpg
    
    alias(别名配置)
    #请求 www.test.com/test/1.jpg,会返回文件 /usr/local/nginx/html/1.jpg	
    
    proxy_pass(反向代理配置)
    # proxy_pass http://127.0.0.1:8080/;	//转发请求到 http://127.0.0.1:8080/1.jpg
    

    (4) server 块

    配置虚拟主机的相关参数,一个 http 中可以有多个 server。

    server {
        keepalive_requests 120; 	#单连接请求上限次数
        listen 		 4545;   		#监听端口
        server_name  127.0.0.1;   	#监听地址       
        location  ~*^.+$ {       	#请求的 url 过滤,正则匹配,~为区分大小写,~*为不区分大小写
           #root path;  			#根目录
           #index vv.txt;  			#设置默认页
           proxy_pass  http://mysvr;	#请求转向 mysvr 定义的服务器列表
           deny 127.0.0.1;			#拒绝的 ip
           allow 172.18.5.54;		#允许的 ip           
        } 
    }
    

    (5) location 块

    配置请求的路由,以及各种页面的处理情况。

    location / {
        root   html;
        index  index.html index.htm;
    }
     
    location /status {
        stub_status on;
        access_log off;
    }
    
    location  ~*^.+$ {
        #root path;
        #index vv.txt;
        proxy_pass  http://mysvr;
        deny 127.0.0.1;
        allow 172.18.5.54;
    }
    

    参考:
    nginx 网站服务
    nginx 服务详细介绍
    nginx 配置详解-菜鸟教程
    nginx 配置文件(nginx.conf)配置详解

    4. Nginx 访问控制

    4.1 访问状态统计

    查看安装的 nginx 模块是否包含 --with-http_stub_status_module 模块

    /usr/local/nginx/sbin/nginx -V 或 nginx -V
    

    修改 nginx.conf 配置文件,添加 stub_status 配置
    在这里插入图片描述
    重启服务,访问测试

    systemctl restart nginx
    echo "192.168.10.20 www.test.com" >> /etc/hosts
    

    在这里插入图片描述
    字段含义

    Active connections: 1              #当前的活动链接数
    server accepts handled requests    #已经处理的连接信息
     1 1 1                             #已处理的连接数、成功的TCP握手次数、已处理的请求数
    Reading: 0 Writing: 1 Waiting: 0   #正在读、写以及等待的连接数
    

    使用脚本监控连接数

    [root@c7-1 /data]#cat connect.sh
    #!/bin/bash
    curl -s www.test.com/status > active.txt
    connect=$(awk '/Active/ {print $3}' active.txt)
    
    if [ $connect -gt 1 ];then
            echo -e "\033[31m当前连接数过高,请注意!\033[0m"
    else
            echo -e "\033[32m连接数正常\033[0m"
    fi
    
    [root@c7-1 /data]#bash connect.sh 
    连接数正常
    

    4.2 基于授权的访问控制

    生成用户密码认证文件

    yum -y install httpd-tools
    htpasswd -c /usr/local/nginx/passwd.db zhangsan
    chown nginx /usr/local/nginx/passwd.db
    chmod 400 /usr/local/nginx/passwd.db
    

    修改主配置文件,添加认证配置项

    [root@c7-1 ~]#vim /usr/local/nginx/conf/nginx.conf
    ......
            location / {
                root   html;
                index  index.html index.htm;
                ##添加认证配置
                auth_basic "secret";      ##设置密码提示框文字信息
                auth_basic_user_file /usr/local/nginx/passwd.db;
            }
    ......
    

    重启服务,访问测试

    nginx -t
    systemctl restart nginx
    //使用虚拟机自带的火狐浏览器访问 www.test.com
    

    在这里插入图片描述
    在这里插入图片描述

    4.3 基于客户端的访问控制 – 黑名单白名单

    访问控制规则如下:

    • deny IP/IP段:拒绝某个 IP 或 IP 段的客户端访问
    • allow IP/IP段:允许某个 IP 或 IP 段的客户端访问
    • 规则从上往下执行,若匹配则停止,不再往下匹配
      在这里插入图片描述
    systemctl restart nginx
    #在 192.168.10.30 机器上测试访问
    

    在这里插入图片描述

    5. Nginx 虚拟主机

      虚拟主机使用的是特殊的软硬件技术,它把一台运行在因特网上的服务器主机分成一台台 虚拟 的主机,每台虚拟主机都可以是一个独立的网站,可以具有独立的域名,具有完整的 Intemet 服务器功能(WWW、FTP、Email 等),同一台主机上的虚拟主机之间是完全独立的。从网站访问者来看,每一台虚拟主机和一台独立的主机完全一样。

      利用虚拟主机,不用为每个要运行的网站提供一台单独的 Nginx 服务器或单独运行一组 Nginx 进程。虚拟主机提供了在同一台服务器、同一组 Nginx 进程上运行多个网站的功能。

    5.1 基于域名的 nginx 虚拟主机

    为虚拟主机提供域名解析

    echo "192.168.10.20 www.test.com www.abc.com" >> /etc/hosts
    

    为虚拟主机准备网页文档

    mkdir -p /var/www/html/test
    mkdir -p /var/www/html/abc
    echo "<h1>www.test.com</h1>" > /var/www/html/test/index.html
    echo "<h1>www.abc.com</h1>" > /var/www/html/abc/index.html
    

    修改 nginx.conf 配置文件,添加如下配置

    ......
        server {
            listen       80;
            server_name  www.test.com;
    
            charset utf-8;
    
            access_log  logs/test.access.log;
    
            location / {
                root   /var/www/html/test;
                index  index.html index.htm;
            }
        }
    
        server {
            listen       80;
            server_name  www.abc.com;
    
            charset utf-8;
    
            access_log  logs/abc.access.log;
    
            location / {
                root   /var/www/html/abc;
                index  index.html index.htm;
            }
        }
    ......
    

    重启服务,访问测试

    nginx -t
    systemctl restart nginx
    

    在这里插入图片描述
    在这里插入图片描述

    5.2 基于 IP 的 nginx 虚拟主机

    添加网卡

    ifconfig ens33:0 192.168.10.21 netmask 255.255.255.0
    #删除:ifconfig ens33:0 del 192.168.10.21
    

    修改 nginx.conf 配置文件

    ......
        server {
            listen 192.168.10.20:80;
            server_name  www.test.com;
    
            charset utf-8;
    
            access_log  logs/test.access.log;
    
            location / {
                root   /var/www/html/test;
                index  index.html index.htm;
            }
        }
    
        server {
            listen 192.168.10.21:80;
            server_name  www.abc.com;
    
            charset utf-8;
    
            access_log  logs/abc.access.log;
    
            location / {
                root   /var/www/html/abc;
                index  index.html index.htm;
            }
        }
    ......
    

    重启服务,访问测试

    nginx -t
    systemctl restart nginx
    

    在这里插入图片描述
    在这里插入图片描述

    5.3 基于端口的 nginx 虚拟主机

    修改 nginx.conf 配置文件

    ......
        server {
            listen 192.168.10.20:80;
            server_name  www.test.com;
    
            charset utf-8;
    
            access_log  logs/test.access.log;
    
            location / {
                root   /var/www/html/test;
                index  index.html index.htm;
            }
        }
    
        server {
            listen 192.168.10.20:8888;
            server_name  www.abc.com;
    
            charset utf-8;
    
            access_log  logs/abc.access.log;
    
            location / {
                root   /var/www/html/abc;
                index  index.html index.htm;
            }
        }
    ......
    

    重启服务,访问测试

    nginx -t
    systemctl restart nginx
    

    在这里插入图片描述
    在这里插入图片描述
    ————————————————————————————————————————————————————————————
    参考:
    Nginx 学习总结
    正反代理与负载均衡

    展开全文
  • nginx配置

    万次阅读 2021-08-25 20:19:10
    Nginx的安装和使用 本文是基于WIndows 10和CentOS 7.3系统环境,进行Nginx的安装和使用 WIndows 10 Nginx-1.16.1 CentOS 7.3 一、nginx简介 (1) 什么是nginx Nginx是一个高性能的http和反向代理web服务器。 Nginx是...
  • Docker 安装配置挂载 Nginx

    千次阅读 2022-03-25 19:20:47
    一、容器内部修改nginx.conf #拉取nginx docker pull nginx:latest #启动容器 #docker run -d -p 9090:9090 --name nginx01 -v ~/app/nginx:/usr/local/nginx nginx:latest docker run --name nginx -p 9090:9090 -d...
  • 文章目录启动Nginx停止nginxservice 服务脚本Nginx 开机自启 启动Nginx nginx安装完成后,切换到nginx安装目录中的sbin目录(如果在执行 ./configure 没有指定额外的参数,则sbin目录为默认目录,否则切换到自定义...
  • Nginx

    千次阅读 多人点赞 2019-10-17 18:56:59
    Nginx 编译 Nginx 针对 Unix 环境 下载 NginxNginx 官网 出下载想要编译版本的 NginxNginx 官方提供三个版本: Mainline version 主线版本,功能较新,稳定性较 Stable version 稍差,建议学习使用该版本...
  • Linux下Nginx配置nginx-module-vts

    千次阅读 2022-03-13 20:24:51
    用Prometheus进行nginx的监控可以自动的对相关server_name和upstream进行监控,你也可以自定义Prometheus的数据标签,实现对不同机房和不同项目的nginx进行监控。 监控Nginx主要用到以下三个模块: nginx-module-...
  • Linux安装Nginx并配置启动命令

    千次阅读 2022-03-12 09:37:41
    因为Nginx依赖于gcc的编译环境,所以,需要安装编译环境来使Nginx能够编译起来 yum install gcc-c++ Nginx的http模块需要使用pcre来解析正则表达式,需要安装pcre yum install -y pcre pcre-devel 安装依赖的解压...
  • debian安装nginx 介绍 (Introduction) Nginx is one of the most popular web servers in the world and responsible for hosting some of the largest and highest-traffic sites on the internet. It is more ...
  • Ubuntu部署nginx

    千次阅读 2022-03-22 12:14:54
    Ubuntu安装nginx
  • nginx反向代理:代理和服务端在一起控制服务器接收外网访问 nginx负载均衡 负载:承受前方高并发访问(用户量大,访问次数多) 单 台的nginx 上限3-7万并发。 均衡:将大量并发按照需求进行分发到后端服务器。 nginx的代理...
  • nginx 配置ssl

    万次阅读 多人点赞 2022-05-29 11:01:11
    nginx 配置ssl
  • Nginx漏洞总结

    千次阅读 2021-10-08 21:53:54
    Nginx简介 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名...
  • prometheus监控nginx

    千次阅读 2022-03-19 22:22:41
    nginx-module-vts:Nginx virtual host traffic statusmodule,Nginx的监控模块,能够提供JSON格式的数据产出。 nginx-vts-exporter:Simple serverthat scrapes Nginx vts stats and exports them via ...
  • Nginx + Tomcat 实现负载均衡

    万次阅读 2021-10-19 08:49:53
    而我们在 Linux 平台上通过 Nginx + PHP 实现动静分离,而实际生产中往往一台 nginx 需要 “对应” 多个动态处理的服务(即 tomcat),所以如何将前端接收到的动态请求转交给后端多个 tomcat 处理,是我们此处研究的...
  • 今天尚硅谷出了新版的Nginx教程,感觉之前的教程有点浅所以我决定再看一遍,然后开始看之前要把之前的Nginx卸载掉。在安装教程对应版本的Nginx,这样看教程的时候错误可能会少一点。 目录 一、卸载Nginx 1、检查...
  • macos 安装nginx

    千次阅读 2022-03-21 17:47:36
    macos离线安装Nginx。安装Nginx需要用到pcre和openssl,需要提前准备这两个文件。
  • 完全卸载nginx及安装的详细步骤

    千次阅读 2022-03-15 12:19:58
    在开局配置Nginx时有可能会配置错误,报各种错误代码。看不懂或者懒得去看这个报错时,其实最简单的方式是卸载并重装咯。今天就带大家一起学习下,如何彻底卸载nginx程序。 卸载nginx程序的详细步骤 1、停止Nginx...
  • 目前官方推荐的controller有:[目前支持和维护 AWS, GCE 和 nginx Ingress 控制器] https://kubernetes.io/zh/docs/concepts/services-networking/ingress-controllers/ 我们使用nginx控制器,其官网给出的配置方法...
  • nginx 负载均衡配置

    万次阅读 多人点赞 2022-05-02 16:37:13
    nginx 负载均衡配置
  • 本文主要是介绍是nginx如何配置正向代理、反向代理及负载均衡,如果你自己从来没有安装过nginx,想要先初步了解下nginx的基本安装及最简单的访问,可以看下我的这篇博文 nginx–如何基于rpm包进行离线安装及配置...
  • nginx系列之一:nginx入门

    万次阅读 多人点赞 2019-05-11 17:06:35
    一、nginx 功能介绍 Nginx因为它的稳定性、丰富的模块库、灵活的配置和低系统资源的消耗而闻名.业界一致认为它是Apache2.2+mod_proxy_balancer的轻量级代替者,不仅是因为响应静态页面的速度非常快,而且它的模块...
  • nginx在安装时使用root权限进行安装并启用,如何更改为普通用户权限运行nginx(亲测)
  • Nginx系列(1):Nginx安装及配置详解

    千次阅读 2020-06-26 21:14:39
    Type=forking WorkingDirectory=/opt/nginx-opt/nginx ExecStartPre=/opt/nginx-opt/nginx/sbin/nginx -t -c \ /opt/nginx-opt/nginx/conf/nginx.conf ExecStart=/opt/nginx-opt/nginx/sbin/nginx -c \ /opt/nginx-...
  • 平时修改nginx配置文件需要重启,这样会影响到用户体验,Nginx有以下几种方案实现动态配置: Consul+OpenResty、Consul+upsync Consul 简介 Consul开源的分布式服务注册与发现系统,通过HTTP API可以使得服务注册、...
  • Nginx面试题(总结最全面的面试题!!!)

    万次阅读 多人点赞 2020-04-11 23:08:48
    文章目录什么是Nginx?为什么要用Nginx?为什么Nginx性能这么高?Nginx怎么处理请求的?什么是正向代理和反向代理?使用“反向代理服务器的优点是什么?Nginx的优缺点?Nginx应用场景?Nginx目录结构有哪些?Nginx...
  • 一、安装nginx 1.1 资源准备 查看系统版本 lsb_release -a 这里以Linux Centos 7为例。 官方下载安装包 http://nginx.org/en/download.html 这里以最新稳定版本nginx-1.20.1为例,具体版本按实际需要进行下载,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 937,799
精华内容 375,119
关键字:

nginx