Nginx学习笔记

Nginx常用命令

cd /usr/local/nginx/sbin #进入nginx安装目录
./nginx -v               #查看nginx版本号
./nginx                  #启动nginx
./nginx -s stop          #停止nginx
./nginx -s reload        #修改配置文件后,重新加载nginx

#windows环境命令
start nginx       
nginx -s stop 
nginx -s reload

#注意nginx所在路径不要包含中文,否则启动报错

Nginx配置文件

配置文件位置

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

配置文件结构

#全局块,从顶部位置到events之间,配置全局参数

#events块
events {
    
}

#http块
http {
		
	#server块,可以配置多个
	server {

		#location块,可以配置多个
                location  {
			
                }

		#location块
		location  {
			
                }
        }

	#server块
	server {
	    ......
        }

}

location指令

#语法
location [ = | ^~ |~ | ~* ] uri {

}

#location1
location = /website  {
	#精准匹配
	#http://127.0.0.1/website 成功
	#http://127.0.0.1/website?age=18 成功
	#http://127.0.0.1/website/user/index.jsp 失败
	#http://127.0.0.1/website01/index.jsp 失败
}

#location2
location ^~ /website {
	#前缀匹配
	#http://127.0.0.1/website01/index.jsp 成功
	#http://127.0.0.1/website/user/index.jsp 成功
	#http://127.0.0.1/web/website/index.jsp 失败
}

#location3
location ~ /website  {
  #正则表达式匹配,/website是一个正则表达式
}

#location4
location ~* /website  {
  #正则表达式匹配,不区分大小写,/website是一个正则表达式
}

#location5
location  /website/page  {
  #无修饰符的前缀匹配,location5与location2不能相同,否则启动nginx报错
}

若一个请求url,能够匹配多个location时,nginx会按优先级选择最终的location进行请求转发

1. 不存在location5时的优先级
location1 > location2 > location3 > location4(正则表达式的优先级是谁写在前面谁的优先级高)

2. 不存在location2的优先级
location1 > location3 > location4 > location5

3. 当location5与location2都存在,且location5的匹配度高于location2时
location1 > location3 > location4 > location5

4. 当location5与location2都存在,且location2的匹配度高于location5时
location1 > location2 > location3 > location4

什么叫匹配度?举个例子:http://127.0.0.1/website/page/index.jsp location5就比location2的匹配度高

Nginx反向代理

#访问地址:http://192.168.1.2/website/1.html
location /website/ {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Real-PORT $remote_port;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
    #实际就会转发到 http://192.168.1.2:8080/website/1.html
    proxy_pass http://192.168.1.2:8080; 

    #实际就会转发到 http://192.168.1.2:8080/1.html
    #proxy_pass http://192.168.1.2:8080/; 

    proxy_connect_timeout 30s;
    proxy_send_timeout 30s;
    proxy_read_timeout 60s;   #读取目标服务器超时时间,如果目标服务器响应时间很长,该值可以设高点
}

#http://172.16.3.10/test/test01?name=zhangsan
location /test/test01 {
            
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Real-PORT $remote_port;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
    #实际就会转发到 http://172.16.3.10:8080/web-test/test02?name=zhangsan	    
    proxy_pass http://172.16.3.10:8080/web-test/test02; 

}

Nginx负载均衡

http {
		
	#负载均衡服务器列表,myserver名字随便取,默认使用轮询策略:每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器死机,故障系统自动剔除,使用户访问不受影响
	upstream myserver {
		server 192.168.1.2:8080;
		server 192.168.1.2:8081;
	}

	#权重:weight值越大,分配到的访问几率越高
	#upstream myserver {
	#	server 192.168.1.2:8080 weight=1;
	#	server 192.168.1.2:8081 weight=2;
	#}

	#ip_hash:每个请求按照ip的hash结果分配
	#upstream myserver {
	#	ip_hash;
	#	server 192.168.1.2:8080;
	#	server 192.168.1.2:8081;
	#}

	#fair:此种算法可以根据页面大小和加载时间长短智能地进行负载均衡;也就是根据后端服务器的响应时间来分配请求;响应时间段的优先分配;
	#nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载nginx的upstream_fair模块
	#upstream myserver {
	#	fair;
	#	server 192.168.1.2:8080;
	#	server 192.168.1.2:8081;
	#}

	#还有其他三方负载均衡策略,这里就不介绍了

	server {
            listen       70;
            server_name  127.0.0.1;
            location  /website {
            proxy_pass http://myserver; #这里换成upstream的名字
        }
    }

}

Nginx动静分离 

简单一句话,把前端从tomcat中剥离出来,通过nginx访问前端页面(因为前端不需要jvm),后端仍然放到tomcat(因为nginx解析不了java程序,只能做请求转发)

在Linux系统中新建前端页面,结构如下

nginx配置如下

server {
	listen       90;              #监听端口90
	server_name  192.168.1.3;     #nginx服务器ip

	location  /html/ {
		#静态资源根目录,指项目存放的路径,可以是绝对路径,也可以是相对路径
		#需要注意的是,该配置是一个组合路径,即location+root必须存在,例如按现在的配置,物理路径/opt/html必须是存在的(这里是Linux系统的路径),否则会报404
		#访问路径则是以location为主,这里的访问路径就是http://192.168.1.3/90/html/xxx.html,对应的路径路径就是/opt/html/xxx.html
		root /opt;                #静态资源根目录,指项目存放的路径,可以是绝对路径,也可以是相对路径
		index index.html;         #索引页文件,可以写多个,以空格分开
		autoindex on;             #是否开启目录索引
	}
}

 

Nginx原理分析

大家发现没有,nginx启动的时候出现了2个进程,一个叫master,一个叫worker

 worker在哪里设置,需要设置多少个?

worker_processes  1; #在全局块中配置,默认值为1,已经配置好了的

Nginx同 redis 类似都采用了 io 多路复用机制,每个 worker 都是一个独立的进程,但每个进程里只有一个主线程,通过异步非阻塞的方式来处理请求, 即使是千上万个请求也不在话下。每个 worker 的线程可以把一个 cpu 的性能发挥到极致。所以 worker 数和服务器的 cpu数相等是最为适宜的。设少了会浪费 cpu ,设多了会造成 cpu 频繁切换上下文带来的损耗。

cat /proc/cpuinfo | grep processo #查看cup核心数

worker_processes     2;      #配置2个worker

#nginx默认是没有开启利用多核cpu的配置的。需要通过增加worker_cpu_affinity配置参数来充分利用多核cpu
#参数值是根据cpu核心数来配置的,2核是01,4核是0001,8核是00000001,有多少个核,就有几位数,1表示该内核开启,0表示该内核关闭
worker_cpu_affinity 01 10; #这里表示2进程2核心

#4位数表示cpu是4核的,0101开启第一个和第三个内核,1010表示开启第二个和第四个内核
#worker_cpu_affinity 0101 1010; ;表示2进程4核心

配置worker_connection

这个值是表示每个worker 进程所能建立连接的最大值,所以,一个 nginx 能建立的最大连接数,应该是 worker_connections * worker_processes 。当然,这里说的是最大连接数,对于HTTP 请求本地资源来说,能够支持的最大并发数量是 worker_connections *worker_processes ,如果是支持 http1.1 的浏览器每次访问要占两个连接,所以普通的静态访问最大并发数是: worker_connections * worker_processes /2 ,而如果是 HTTP 作 为反向代理来说,最大并发数量应该是 worker_connections *worker_processes/4。因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服务的连接,会占用两个连接。

events {
    worker_connections  1024; #设置单个进程的最大连接数,默认值1024,该值不能超过操作系统单个进程打开的文件数,

    #如果要调高worker_connections的值需要设置下面的值 worker_connections <= worker_rlimit_nofile
    #worker_rlimit_nofile 65535;
}
ulimit -n #查看操作系统进程的最大限制,该值是可以更改的,最大为65535

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值