一,Nginx 学习笔记系列博客
二,Nginx
Nginx(“engine x”)是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。
在高连接并发的情况下,Nginx是Apache服务器不错的替代品。
官网:http://nginx.org/
中文文档:http://www.nginx.cn/doc/
其他相关资料:
Nginx+Tomcat搭建高性能负载均衡集群:http://blog.csdn.net/mlc1218559742/article/details/53128382
https://www.yiibai.com/nginx/
https://www.w3cschool.cn/nginx/
推荐阅读:
《实战Nginx:取代Apache的高性能Web服务器》
三,进程
Nginx 服务在运行时,会保持一个主进程和一个或多个 worker process 工作进程。
获取主进程 pid 有两个途径:
1,在 Nginx 服务启动后,会产生一个名为 nginx.pid 的文件,文件位置可以从 nginx.conf 的配置中查到。
2,通过命令ps -ef | grep nginx
查看。
四,配置文件
默认配置文件nginx.conf的内容:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/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 /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
其中include /etc/nginx/conf.d/*.conf;
表示包含其他配置文件,即conf.d下的default.conf
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/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 /usr/share/nginx/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;
#}
}
nginx.conf一共由三部分组成,分别为全局块、events块和http块。在http块中,又包含http全局块、多个server块。每个server块中,可以包含server全局块和多个location块。在同一个配置块中嵌套的配置块,各个之间不存在次序关系。
配置文件支持大量可配置的指令,绝大多数指定不是特定属于某一个块的。同一个指定放在不同的层级的块中,其作用域也不同,一般情况下,高一级块中的指令可以作用于自身所在的块和此块包含的所有低层级块。如果某个指令在两个不同层级的块中同时出现,则采用就近原则,即以较低层级块中的配置为准。
1,全局块
全局块主要设置一些影响nginx服务器整体运行的配置指令,因此,这些指令的作用域是nginx服务器全局。
通常包括配置nginx服务器的用户(组)、允许生存的worker process数、nginx进程pid存放路径、日志的存放路径和类型以及配置文件引入等。
2,events块
events块涉及的指令主要影响nginx服务器与用户的网络连接。常用的设置包括是否开启对多worker process下的网络连接进行序列化,是否允许同时接受多个网络连接,选取哪种事件驱动模型处理连接请求,每个worker process可以同时支持的最大连接数等。
3,http块
http块是nginx服务器配置中的重要部分,代理、缓存和日志定义等绝大多数的功能和第三方模块的配置都可以放在这个模块中。
可以在http全局块中配置的指令包括文件引入、mime-type定义、日志自定义、是否使用sendfile传输文件、连接超时时间、单连接请求数上限等。
4,server块
每一个http块都可以包含多个server块,而每个server块就相当于一台虚拟主机,它内部可有多台主机联合提供服务,一起对外提供在逻辑上关系密切的一组服务(或网站)。
和http块相同,server块也可以包含自己的全局块,同时可以包含多个location块。在server全局块中,最常见的两个配置项是本虚拟主机的监听配置和本虚拟主机的名称或IP配置。
5,location块
每个server块都可以包含多个location块。
location块的主要作用是,基于nginx服务器接收到的请求字符串(例如server_name/uri-string),对除虚拟主机名称(也可以是IP别名)之外的字符串(前例中“/uri-string”部分)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能都是这部分实现。许多第三方模块的配置也是在location块中提供功能。
五,http负载均衡和反向代理
推荐阅读《实战Nginx:取代Apache的高性能Web服务器》第六章和《Nginx高性能Web服务器详解》六、七章
六,Nginx+ Keepalived 高可用方案
高可用( High Availability )是指通过专门的架构设计,减少整个系统的故障时间,保持其提供服务的高度可用性。在将Nginx 作为负载均衡服务器使用时, upstream 机制能够检测出后端服务器是否可用,如果其中一台服务器右机, Nginx 能够自动转移到后端正常的服务器中,以保持系统持续可用。
衡量一个集群的高可用性在于没有单点故障,即其中任何一台服务器若机都不会造成整个服务中断。若一个集群在前端只有一台Ng inx 反向代理负载均衡服务器, 一旦该服务器发生故障,就会造成整个集群的服务中断。为了解决这个问题,可以利用Keepalived 部署备用服务器,实现故障转移。
Keepalived 内置了VRRP (Virtual Router Red undancv Protocol ,虚拟路由冗余协议)功能, VRRP 用于解决静态路由出现的单点故障问题,它通过IP 多播的方式通信,当发现主路由故障时,通过选举策略将备用路由更换为主路由,从而继续提供服务。
Keepalived 利用VRRP 实现了将提供对外访问的IP 地址( Virtual IP )自动在主服务器( Master )和备用服务器(Backup )之间m 换,正常情况下Master 使用Virtual IP 提供对外访问,当Master 故障H才,其他正在监控Master 的Backup 会通过优先级( priority )机制竞争接管Virtual IP 继续对外提供服务,其他落选的Backup 会继续监控当前使用的Virtual IP 服务器。
部署方式参考《Nginx高性能Web服务器实战教程》8.3节。
七,参考资料
《Nginx高性能Web服务器详解》
《Nginx高性能Web服务器实战教程》