一、Nginx的安装(Windows)
1.下载nginx
http://nginx.org/en/download.html
选择第二个版本
下载后直接解压:
2.启动nginx
有很多种方法启动nginx
(1)直接双击nginx.exe,双击后一个黑色的弹窗一闪而过
(2)打开cmd命令窗口,切换到nginx解压目录下,输入命令 nginx.exe 或者 start nginx ,回车即可
3.检查nginx是否启动成功
直接在浏览器地址栏输入网址 http://localhost:80,回车,出现以下页面说明启动成功
也可以在cmd命令窗口输入命令 tasklist /fi “imagename eq nginx.exe” ,出现如下结果说明启动成功
nginx的配置文件是conf目录下的nginx.conf,默认配置的nginx监听的端口为80,如果80端口被占用可以修改为未被占用的端口即可。
检查80端口是否被占用的命令是: netstat -ano | findstr 0.0.0.0:80 或 netstat -ano | findstr “80”
杀死进程:taskkill/pid 进程号 -f
当我们修改了nginx的配置文件nginx.conf 时,不需要关闭nginx后重新启动nginx,只需要执行命令 nginx -s reload 即可让改动生效
4.关闭nginx
如果使用cmd命令窗口启动nginx,关闭cmd窗口是不能结束nginx进程的,可使用两种方法关闭nginx
(1)输入nginx命令 nginx -s stop(快速停止nginx) 或 nginx -s quit(完整有序的停止nginx)
(2)使用taskkill taskkill /f /t /im nginx.exe
5.使用nginx代理服务器做负载均衡
我们可以修改nginx的配置文件nginx.conf 达到访问nginx代理服务器时跳转到指定服务器的目的,即通过proxy_pass 配置请求转发地址,即当我们依然输入http://localhost:8011 时,请求会跳转到我们配置的服务器。
同理,我们可以配置多个目标服务器,当一台服务器出现故障时,nginx能将请求自动转向另一台服务器,例如配置如下:
当服务器 localhost:8080 挂掉时,nginxnginx能将请求自动转向服务器 localhost:8081 。
6.nginx配置静态资源
将静态资源(如jpg|png|css|js等)放在如下配置的D:/dbcp/display_fe/dist目录下,然后在nginx配置文件中做如下配置(注意:静态资源配置只能放在 location / 中),浏览器中访问 http://localhost:8011/1.png 即可访问到D:/dbcp/display_fe/dist目录下的 1.png图片
upstream tomcat_server{
server localhost:8080 weight=2;
server localhost:8081 weight=1;
}
server {
listen 8011;
server_name localhost;
#access_log /usr/local/nginx/logs/local_dbcp-test.log; #main;
location / {
root D:/dbcp/display_fe/dist;
index /index.html;
}
location /api/{
proxy_pass http://tomcat_server;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
7.nignx配置
worker_processes 8; 工作进程个数
worker_connections 65535; 每个工作进程能并发处理(发起)的最大连接数(包含所有连接数)
error_log /data/logs/nginx/error.log; 错误日志打印地址
access_log /data/logs/nginx/access.log 进入日志打印地址
log_format main ‘
r
e
m
o
t
e
a
d
d
r
"
remote_addr"
remoteaddr"request" ‘’$status
u
p
s
t
r
e
a
m
a
d
d
r
"
upstream_addr "
upstreamaddr"request_time"’; 进入日志格式
fastcgi_connect_timeout=300; #连接到后端fastcgi超时时间
fastcgi_send_timeout=300; #向fastcgi请求超时时间(这个指定值已经完成两次握手后向fastcgi传送请求的超时时间)
fastcgi_rend_timeout=300; #接收fastcgi应答超时时间,同理也是2次握手后
fastcgi_buffer_size=64k; #读取fastcgi应答第一部分需要多大缓冲区,该值表示使用1个64kb的缓冲区读取应答第一部分(应答头),可以设置为fastcgi_buffers选项缓冲区大小
fastcgi_buffers 4 64k;#指定本地需要多少和多大的缓冲区来缓冲fastcgi应答请求,假设一个php或java脚本所产生页面大小为256kb,那么会为其分配4个64kb的缓冲来缓存
fastcgi_cache TEST;#开启fastcgi缓存并为其指定为TEST名称,降低cpu负载,防止502错误发生
listen 80; 监听端口
server_name rrc.test.jiedaibao.com; 允许域名
root /data/release/rrc/web; 项目根目录
index index.php index.html index.htm; 访问根文件
二、原理
1.负载均衡算法
(1)round-robin:轮询算法(默认)
(2)least-connected:最少连接,即每次都找连接数最少的服务器来转发请求。
upstream app1 {
least_conn;
server 10.10.10.1;
server 10.10.10.2;
}
(3)ip-hash:每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题。
upstream app1 {
ip_hash;
server 10.10.10.1;
server 10.10.10.2;
}
(4)weighted:权重算法
(5)fair(第三方插件):对比 weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智能地进行负载均衡,响应时间短的优先分配。
upstream app1 {
server 10.10.10.1;
server 10.10.10.2;
fair;
}
(6)url_hash(第三方插件)
必须安装Nginx的hash软件包
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。
upstream app1 {
server 10.10.10.1;
server 10.10.10.2;
hash $request_uri;
hash_method crc32;
}
2.Nginx和Apache区别
Apache: 创建多个进程或线程,而每个进程或线程都会为其分配cpu和内存(线程要比进程小的多,所以worker支持比perfork高的并发),并发过大会榨干服务器资源。
Nginx: 采用单线程来异步非阻塞处理请求(管理员可以配置Nginx主进程的工作进程的数量)(epoll),不会为每个请求分配cpu和内存资源,节省了大量资源,同时也减少了大量的CPU的上下文切换。所以才使得Nginx支持更高的并发。
3.nginx是如何实现高并发的
一个主进程,多个工作进程,每个工作进程可以处理多个请求
每进来一个request,会有一个worker进程去处理。但不是全程的处理,处理到可能发生阻塞的地方,比如向上游(后端)服务器转发request,并等待请求返回。那么,这个处理的worker继续处理其他请求,而一旦上游服务器返回了,就会触发这个事件,worker才会来接手,这个request才会接着往下走。
由于web server的工作性质决定了每个request的大部份生命都是在网络传输中,实际上花费在server机器上的时间片不多。这是几个进程就解决高并发的秘密所在。即@skoo所说的webserver刚好属于网络io密集型应用,不算是计算密集型。
参考:https://www.cnblogs.com/jiangwangxiang/p/8481661.html
https://blog.csdn.net/xal0610/article/details/79531692