重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
Nginx("engine x")是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,它已经在该站点上运行超过两年了。Nginx超越Apache的高性能和稳定性,使得国内使用Nginx作为web服务器的网站越来越多,其中包括新浪博客、新浪播客、网易新闻、腾讯网、搜 狐博客等门户网站频道,六间房、56.com等视频分享网站,Discuz!官方论坛、水木社区等知名论坛盛大在线、金山逍遥网等网络游戏网站豆瓣、人人网、YUPOO相册、金山爱词霸、迅雷在线等新兴Web 2.0网站。
成都创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:网站制作、网站设计、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的金州网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!二、Nginx的优点Nginx作为HTTP服务器,有以下几项基本特性:
1.处理静态文件,索引文件以及自动索引:打开文件描述符缓冲
2.无缓存的反向代理加速,简单的负载均衡和容错
3. FastCGI,简单的负载均衡和容错
4.模块化的结构:
包括gzipping, byte ranges, chunked responses, 以及 SSI-filter等filter。
如果由FastCGI或其它代理服务器处理单页中存在的多个SSI则这项处理可以并行运行而不需要相
互等待。
5.支持SSL 和 TLS SN
三、Nginx的安装安装Nginx步骤很简单,在安装Nginx之前需要安装Nginx的依赖(配置好yum源后)
主要依赖如下:
1.安装gccyum -y install gcc 2.安装pcre
yum install -y pcre-devel 3.安装zlib
下载zlib-1.2.8.tar.gz yum info zlib 获得下载地址http://www.zlib.net/ tar -zxvf zlib-1.2.8.tar.gz 报错:gzip: stdin: not in gzip format tar: Child returned status 1 tar: Error is not recoverable: exiting now mv zlib-1.2.8.tar.gz zlib-1.2.8.tar tar -xvf zlib-1.2.8.tar cd zlib-1.2.8 ./configure make make install 4.安装Nginx
下载 :http://nginx.org/en/download.html tar -zxvfnginx-1.10.1.tar.gz cdnginx-1.10.1 ./configure make make install 默认的安装目录为/usr/local/nginx
四、Nginx的配置Nginx.conf是主配置文件 , Nginx的nginx.conf 的配置说明如下:
user root; #运行用户 worker_processes 1; #启动进程,通常设置成和cpu的数量相等 error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; #工作模式及连接数上限 events { use epoll; #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能 worker_connections 1024; #单个后台worker process进程的并发链接数 # multi_accept on; } #设定http服务器,利用它的反向代理功能提供负载均衡支持 http { include /etc/nginx/mime.types;#设定mime类型,类型由mime.type文件定义 default_type application/octet-stream; access_log /var/log/nginx/access.log; #设定日志格式 #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用, #必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime. sendfile on; #tcp_nopush on; #连接超时时间 #keepalive_timeout 0; keepalive_timeout 65; tcp_nodelay on; #开启gzip压缩 gzip on; gzip_disable "MSIE [1-6].(?!.*SV1)"; #设定请求缓冲 client_header_buffer_size 1k; large_client_header_buffers 4.4k; #设定负载均衡的服务器列表 upstream mysvr { #weigth参数表示权值,权值越高被分配到的几率越大 server 10.30.20.25:9200 weight=5; server 10.30.20.25:9200 weight=1; server 192.168.8.3:80 weight=6; } server { listen 80; #监听80端口 access_log logs/access.log main; #设定本虚拟主机的访问日志 #默认请求 location / { root html; #指定对应uri的资源查找路径,这里html为相对路径 index index.php index.html index.htm; #指定首页index文件的名称,可以配置多个,以空格分开。如有多个,按配置顺序查找 } # 定义错误提示页面 error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
五、Nginx与Elasticsearch结合使用Elasticsearch是一种先进的,高性能的,可扩展的开源搜索引擎,提供全文搜索和实时 分析的结构化和非结构化的数据。
它的特定是可以通过HTTP使用RESTful API,很容易的融入现有的web架构。因此在高 并发的情况下,采用nginx反向代理负载均衡到多台Elasticsearch 服务器上。
架构图:
这种架构的优点:
记录每个API请求的日志 支持大量的客户端连接,不管有没有启用keepalives,比长连接(使用keepalives)到elasticsearch服务器小的多 负载均衡的请求Elasticsearch服务器 缓存数据,减少同一内容再次请求Elasticsearch服务器。NGINX Plus 还提供HTTP API 对缓存数据的清除接口 提供主动健康检测(仅nginx plus),不断检测后端Elasticsearch服务器是否正常,并主动的进行切换。 报告丰富的监控指标(仅nginx plus),提供监控和管理。 支持通过HTTP API动态的配置上游服务器组(仅nginx plus),可以从上游服务器组中添加和删除,上线或下线,改变权重 安全验证。只让持有账户名密码的客户端访问到ES集群。 对特殊接口如"_shutdown"限制访问。(这个功能相当实用) 带角色的访问控制(比如user角色拥有数据访问权限,admin角色拥有集群管控权限)下表比较Elasticsearch 、Elasticsearch +nginx F/OSS、Elasticsearch +NGINX Plus 的功能:
Elasticsearch client nginx F/OSS NGINX Plus Horizontal scalability Y Y Y Keepalive optimization Y Y Centralized HTTP access logs Y Y Queuing and concurrency control Y Response caching Y Y Failover of failed connections Y Y Y Active monitoring of Elasticsearch nodes Y(some clients) Y Advanced load balancing methods Y Y Weighted load balancing Y Y Dynamic reconfiguration Y Status monitoring Y General-purpose HTTP load balancing Y Y简单说明Nginx服务器nginx.conf的配置文件的主要内容。
1.设置请求日志
#全局错误日志及PID文件 error_log /usr/local/nginx/logs/error.log; pid /usr/local/nginx/logs/nginx.pid; http { #设定日志格式 access_log /usr/local/nginx/logs/access.log; }
2.工作模式及连接数上限
events { use epoll; #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能 worker_connections 1024; #单个后台worker process进程的并发链接数 # multi_accept on; }
3.设定负载均衡的服务器列表
upstream mysvr { #weigth参数表示权值,权值越高被分配到的几率越大 #本机上的elasticsearch开启9200端口 server 10.30.20.25:9200 weight=5; server 10.30.20.24:9200 weight=1; server 10.30.20.23:9200 weight=6; }
4.设定请求缓存
client_header_buffer_size 1k; large_client_header_buffers 4.4k;
5.安全验证
server { listen 80; auth_basic "Protected Elasticsearch"; auth_basic_user_file passwords; location / { proxy_pass http://mysvr; proxy_redirect off; } }
passwords文件和nginx.conf在同一目录,里面的格式是按行的"用户名:crypt(3)加密后的密码串":
$ printf "john:$(openssl passwd -crypt s3cr3t)n" > passwords
做完以上配置后重启nginx,则直接访问服务会被禁止:
$ curl -i 10.30.20.25:80 # HTTP/1.1 401 Unauthorized # ...
通过正确的用户名密码规则可顺利访问:
$ curl -ijohn:s3cr3t@10.30.20.25:80 # HTTP/1.1 200 OK # ...
6.对特殊接口如"_shutdown"限制访问
location / { if ($request_filename ~ _shutdown) { return 403; break; } proxy_pass http://mysvr; proxy_redirect off; }
做了此配置之后,直接访问_shutdown会被拒绝:
$ curl -i -X POST john:s3cr3t@10.30.20.25:80/_cluster/nodes/_shutdown # HTTP/1.1 403 Forbidden # ....
7.带角色的访问控制
区分admins和users两种权限,admins可以访问一切API,而users只允许访问_search和_analyze接口。
# Allow access to /_search and /_analyze for authenticated "users" server { listen 80; auth_basic "Elasticsearch Users"; auth_basic_user_file users; location / { return 403; } location ~* ^(/_search|/_analyze) { proxy_pass http://mysvr; proxy_redirect off; } } # Allow access to anything for authenticated "admins" server { listen 80; auth_basic "Elasticsearch Admins"; auth_basic_user_file admins; location / { proxy_pass http://mysvr; proxy_redirect off; } }
参考链接:
http://www.codes51.com/article/detail_157850.html
http://www.cnblogs.com/xiaogangqq123/archive/2011/03/02/1969006.html
http://www.ttlsa.com/nginx/nginx-elasticsearch/
来自为知笔记(Wiz)