nginx是一个高性能的HTTP和反向代理服务器,也可以作为电子邮件的代理服务器。在高连接并发的情况下,Nginx是Apache服务器不错的替代品,能够支持高达 50,000 个并发连接数的响应。Nginx对静态资源的处理非常好,动态的处理我们可以交给Tomcat。
nginx工作原理:
nginx启动之后,后台会运行master和多个worker进程。nginx支持多线程也支持多进程,但是默认是多进程的方式。
master进程主要是用来管理worker进程,包括接收来自外界的信号、向各worker进程发送信号、监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。
Worker进程则是处理基本的网络事件。多个worker之间是平等的,他们同等争取来自客户端的请求,各个进程之间是相互独立的,但是一个请求只能在一个worker进程中进行处理。
Worker的进程的个数是可以设置的(worker_processes属性),一般为当前机器总cpu核心数,这样可以减少上下文切换带来的资源消耗。在Linux操作系统上,worker进程还可以绑定cpu,将某一个worker进程绑定到一个cpu的核上,这样就不会造成进程切换导致的cache的失效。
Nginx采用异步非阻塞的方式,不需要创建线程,每个请求只占用少量的内存,大概10M左右,没有上下文切换,事件处理非常轻便。
nginx的 CPU参数worker_processes和worker_cpu_affinity使用说明:
worker_processes指明了nginx要开启的进程数,据官方说法,一般开一个就够了,多开几个,可以减少机器io带来的影响,一般为当前机器总cpu核心数。
如果我们的cpu为4核,怎么用数字代表我的cpu编号呢?根据cpu的核数,设置几位数字,可以第一位代表第一个cpu,第二位代表第二个cpu,其中用数字1代表使用。我的四核cpu我可以表示为0001,0010,0100,1000。
nginx支持Linux操作系统、windows操作系统,具有跨平台特性,但是有些属性只有在Linux下才具有,比如:worker_cpu_affinity。
nginx常用的命令:
启动nginx:start nginx
停止nginx:nginx –s stop 或者nginx –s quit。stop与quit参数的区别在于stop是快速停止nginx,可能并不保存相关信息,quit是完整有序的停止nginx,并保存相关信息
测试nginx:nginx –t
重载nginx:nginx –s reload,修改nginx的配置文件之后,不需要关闭重新启动,直接使用这个命令就可以重新加载最新的配置信息
重新打开日志文件:nginx –s reopen
nginx做负载均衡服务器:
需求:在两个tomcat中部署相同的项目,tomcat中项目访问端口分别是8001和8002,以下是配置文件:
upstream site{
server 192.168.3.10:8001 weight=2;
server 192.168.3.20:8002 weight=1;
}
server {
listen 80;
server_name 192.168.3.96;
location /{
root jsp;
index index.jsp ;
proxy_pass http://site
}
}
1) proxy_pass:转发路径,接收到请求之后,转发请求到哪里的路径
2) server里面的server_name:这里可以是域名,可以是ip地址,这个是外部客户端访问的地址,其中listen是指我们访问这个server_name服务器的时候,监听的服务器端口。如果server_name有多个域名,用空格隔开就可以。这里支持正则表达式的写法。
3) upstream:我们转发的地址的组合
4) weight:代表转发地址的访问权重,数值越大,权重越大,承担的压力越大。
不同域名映射同一台服务器,共享80端口,怎么根据访问域名的不同访问不同的程序:
设置server代码块即可,例如下面的配置文件,域名分别是yuming1.com和yuming2.com
server {
listen 80;
server_name yuming1.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
index index.jsp;
proxy_pass http://localhost:8001;
proxy_intercept_errors on;
proxy_redirect off;
client_max_body_size 65m;
client_body_buffer_size 128k;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
#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;
}
}
server {
listen 80;
server_name yuming2.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
index index.jsp;
proxy_pass http://localhost:8002;
proxy_intercept_errors on;
proxy_redirect off;
client_max_body_size 65m;
client_body_buffer_size 128k;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
#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;
}
}