Nginx学习笔记

x33g5p2x  于2022-04-02 转载在 其他  
字(5.5k)|赞(0)|评价(0)|浏览(530)

Nginx简介

Nginx 是一个高性能的HTTP和反向代理web服务器

Nignx的主要应用

  • 反向代理
    反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据,再返回的客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器的地址,隐藏了真实服务器IP地址
  • 负载均衡
    单个服务器无法解决访问量过于庞大来的的问题,我们通过增加服务器数量,然后将请求分发到各个服务器上,将原先的请求集中到单个服务器的情况改为分发到多个服务器上,将负载分发到不同的服务器,就是所说的负债均衡
  • 动静分离
    为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度,降低原来服务器的压力

Nginx的安装

Linux系统中安装Nginx

Nginx常用命令

查看nginx版本号:

./nginx -v

普通启动nginx:

./nginx (切换到nginx安装目录的sbin目录下执行 )

通过配置文件启动

./nginx -c /opt/nginx/conf/nginx.conf (在sbin目录下执行)

/opt/nginx/sbin/nginx -c /opt/nginx/conf/nginx.conf

关闭nginx:

./nginx -s stop

优雅关闭nginx:(在处理完请求后关闭)

kill -QUIT 主pid

快速关闭nginx :(无论请求是否处理完成直接关闭)

kill -TERM 主pid

Nginx配置文件

默认配置文件(把注释都删了)

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }      
    }
}

第一部分:全局块

从配置文件开始到 events 块之间的内容,主要会设置一些影响nginx 服务器整体运行的配置指令,主要包括配 置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以 及配置文件的引入等。

#配置worker进行的运行用户 nobody也是linux用户
#user  nobody;
#user  root;

#配置工作进程数目,根据硬件调整
worker_processes  1;

#配置全局错误日志及类型[debug | info | notice | warn | error | crit]默认是error
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#配置进程pid文件
#pid	logs/nginx.pid;

第二部分:events块

events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。

#配置工作模式和连接数
events {
    #每个worker进程支持最大连接数为1024,上限为65535
    worker_connections  1024;
}

第三部分:http块

#配置http服务器,利用它的反向代理功能提供负债均衡支持
http {
    #配置nginx支持哪些多媒体类型,可以在conf/mine.type文件中查看支持哪些多媒体类型
    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;				 #开启gzip压缩输出(一般上线后都开启)
    

    #配置虚拟主机
    server {
        listen       80;		 #监听的端口号
        server_name  localhost;  #配置服务名
        #charset koi8-r;		 #配置字符集
 		#配置本主机的访问日志
        #access_log  logs/host.access.log  main;
	
		#默认的匹配/的请求,当访问路径中有/时会被该location匹配到并进行处理
        location / {
		    #root是配置服务器的默认网站根目录位置,默认为nginx安装目录下的html目录
            root   html;
		    #配置首页文件的名称
            index  index.html index.htm;
        }

		#配置404页面
        #error_page  404	/404.html; 
		#配置50x页面
        # redirect server error pages to the static page /50x.html
        #error_page   500 502 503 504  /50x.html;
        
		#精准匹配
		location = /50x.html {
            root   html;
        }
    }

    #配置另外一台虚拟主机
    #server {...}
}

反向代理案例一

实现效果: 打开浏览器地址栏上输入www.123.com,就跳转到Linux的tomcat的主页面

  • 第一步:
    在windows系统的host文件中配置域名和ip地址的对应关系
    host问价位置C:\Windows\System32\drivers\etc\hosts
192.168.140.129	 www.123.com (如果提示修改权限不够可以将host文件托到桌面改)
  • 第二步 :
    在nginx配置文件中配置请求转发修改配置文件
server_name 192.168.140.129

location / {
​	...
	proxy_pass http://127.0.0.1:8080
}

  • 第三步:保存配置文件并重启nginx

测试

反向代理案例二

实现效果:根据访问路径跳转到不同的端口服务中,nginx监听端口为9001
访问http://192.168.140.129:9001/edu 就跳转到127.0.0.1:8080
访问http://192.168.140.129:9001/vod 就跳转到127.0.0.1:8081

  • 准备工作:准备两个tomcat服务器并启动服务
    在8080端口的tomcat服务器的webapp目录下创建edu文件夹并在edu文件夹中创建index.html
    在8081端口的tomcat服务器的webapp目录下创建vod文件夹并在vod文件夹中创建index.html
  • 第一步:修改nginx的配置文件
server{
​	listen 9001;
​	server_name 192.168.140.129;
​	location ~/edu/{
​		proxy_pass http://localhost:8080;
​	}

​	location ~/vod/{
​		proxy_pass http://localhost:8081;
​	}
}

  • 第二步:保存配置文件并重启nginx
  • 第三步:开发9001和8081端口并重启防火墙
sudo firewall-cmd --add-port=8081/tcp --permanent
sudo firewall-cmd --add-port=9001/tcp --permanent
firewall-cmd --reload

测试

location指令说明

符号含义
=精确匹配。用于标准uri前,要求请求字符串和uri严格匹配。如果匹配成功,就停止匹配,立即执行该location里面的请求。
~正则匹配。用于正则uri前,表示uri里面包含正则,并且区分大小写。
~*正则匹配。用于正则uri前,表示uri里面包含正则,不区分大小写。
^~非正则匹配。用于标准uri前,nginx服务器匹配到前缀最多的uri后就结束,不会使用正则匹配。
普通匹配(最长字符匹配)。与location顺序无关,是按照匹配的长短来取匹配结果。若完全匹配,就停止匹配。

1、精准匹配

location =/ { #规则A }
location =/demo { #规则B }
#规则A匹配http://192.168.140.129/
#规则B匹配http://192.168.140.129/demo

2、正则匹配大小写敏感

location ~ /demo/ { #规则C }
#匹配 http://192.168.140.129/demo
#不匹配 http://192.168.140.129/Demo

3、正则匹配大小写不敏感

location ~ /demo/ { #规则D }
#匹配 http://192.168.140.129/demo
#匹配 http://192.168.140.129/Demo

4、^~只匹配以uri开头

location ^~ /img/ { #规则E }
#匹配 http://192.168.140.129/img
#匹配 http://192.168.140.129/img/a.jpg
#不匹配 http://192.168.140.129/vod/a.jpg

5、默认匹配

location / { #规则F }
以上都不匹配的时候就会匹配到规则F

匹配优先级:精准匹配(=) > |非正则匹配(^~) >正则匹配(~和~*) > 默认匹配

负载均衡案例

实现效果: 在浏览器地址栏输入http://192.168.140.129/edu/index.html 实现负载均衡
将请求均分到8080和8081端口

  • 准备工作
    准备两台tomcat
    在两台tomcat里面的webapp目录中,创建edu文件夹,然后再edu文件夹中创建index.html
  • 第一步
    在nginx配置文件中进行负载均衡的配置
upstream myserver{
    server 192.168.140.129:8080;
    server 192.168.140.129:8081;
}
location / {
	proxy_pass http://myserver;
	root   html;
	index  index.html index.htm;
}

  • 第二步:保存配置文件并且重启nginx

测试

刷新页面

Nginx提供的负载均衡几种分配

1、轮询(默认)
每个请求按时间顺序逐一分配不同的后端服务器,如果后端服务器逗down掉会自动删除

2、weight
weight表示权重,默认为1,权重越高被分配的客户端越多。指定轮询几率,weight和访问率成正比,用于后端服务器性能不均的情况

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

3、ip_hash
每个请求按照访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题

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

4、fair(第三方)
按照后端服务器的响应时间分配请求,响应时间短的优先分配

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

动静分离案例

实现动静分离的两种方式:

  • 一种是纯粹将静态文件独立成单独的域名,放在独立的服务器上(主流)
  • 一种是将动态和静态资源混合放在一起发布,通过nginx分开
    通过location指定不同的后缀名实现不同请求的转发。通过expires参数设置,可以使浏览器缓存过期时间,减少与服务器的请求和流量。具体Expires定义:给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。这种方式非常适合不经常变动的资源,设置3d表示3天内访问这锅URL发送一个请求,对比服务器该文件最后更新时间没有变化则不会从服务器中抓取,返回状态码403.如果有修改则需要从服务器上重新下载,返回状态码200

具体步骤

  • 准备工作:准备一些静态资源文件(这些静态资源我放在/static中)

html文件夹放中放了一个静态网页
image文件夹中放了一张图片

  • 配置nginx配置文件
location /html/ {
	root   /static/;
	index  index.html index.htm;
}
location /image/{
	root  /static/;
	autoindex on;
}

  • 第二步保存并重启nginx

测试

相关文章