资讯专栏INFORMATION COLUMN

Nginx中间件运维实战

IT那活儿 / 2029人阅读
Nginx中间件运维实战

点击上方“IT那活儿”,关注后了解更多内容,不管IT什么活儿,干就完了!!!

1

nginx简介
Nginx(“engine x”)是俄罗斯人Igor Sysoev(塞索耶夫)编写的一个高性能HTTP和反向代理服务器。
很长一段时间以来,它一直在许多负载很重的俄罗斯网站上运行,包括 Yandex、Mail.Ru、VK和 Rambler。 国内主流的互联网公司,如:百度、腾讯、阿里、新浪、360、网易新闻、水木社区、豆瓣、迅雷在线等多家网站使用 Nginx 作为Web服务器或反向代理服务器。

2

nginx优点
  • 高并发响应性能非常好:根据给出的数据,能够支持高达5w/s的并发连接数的响应。

  • 内存消耗小:开启10个nginx才占150M内存 ,nginx处理静态文件比apache 占用更少的内存及资源,所有它是轻量级的(为Apache的1/5-1/10)。

  • 配置代码简洁且容易上手:配置简单,基本在一个conf文件中配置,性能比较稳定。

  • 支持负载均衡、反向代理、虚拟主机等。

  • Nginx内置健康检查功能:可对后端服务进行健康检查。

  • 支持Rwrite重写规则。

  • 低成本:Nginx可以做高并发的负载均衡,且Nginx是开源免费的;

    支持PHP cgi方式和FastCGI方式。

  • 可以作为缓存服务器、邮件代理服务器。

3

nginx使用场景
  • http服务器:nginx是一个http服务可独立提供http服务。可以做网页静态服务器。

  • 虚拟主机:可以实现在一台服务器虚拟出多个网站,例如个人网站使用的虚拟机。

  • 反向代理:是指以代理服务器身份来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端。

  • 负载均衡:负载均衡的大致原理是指采用一定的分配策略将”网络负载”均衡的分摊到网络集群的多个服务器上。

  • nginx中也可以配置安全管理:比如可以使用Nginx搭建API接口网关,对每个接口服务进行拦截。

4

nginx体系架构
Nginx由内核和模块组成,其中,内核的设计非常微小和简洁。由于模块化的设计,所以各种功能均是由对应的模块来完成。
相比传统Web服务器,Nginx表现得更具有专业性。在架构上Nginx受到各种操作系统中高级事件机制处理模式的启发,Nginx实现了整体基于master/slave的核心框架,形成了模块化,事件驱动(event-driver)机制,异步处理,单线程非阻塞的架构模式。
Nginx模块从结构上分为基础模块、核心模块、第三方模块,模块间是分层次的:
  • 核心模块:HTTP模块、EVENT模块和MAIL模块等。
  • 基础模块:HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块。
  • 第三方模块:HTTP Upstream Request Hash模块、Notice模块和HTTP Access Key模块、Limit_req模块、Upstream check module等。

Nginx默认采用多进程工作方式,nginx启动后,会运行一个master进程和多个worker进程。其中master充当整个进程组与用户的交互接口,同时对进程进行监护,管理worker进程来实现重启服务、平滑升级、更换日志文件、配置文件实时生效等功能。
worker用来处理基本的网络事件,worker之间是平等的,他们共同竞争来处理来自客户端的请求。

5

Nginx安装
./configure --prefix=/data/gzopen/nginx_8589
--user=gzopen --group=gzopen
--with-http_ssl_module --with-http_stub_status_module
--with-http_sub_module --with-http_realip_module
--with-http_gzip_static_module --with-http_addition_module
--with-ipv6 --with-stream --with-stream_ssl_preread_module
--with-stream_ssl_module --with-pcre=../pcre-8.43  
-with-openssl=../openssl-1.1.1c
--with-zlib=../zlib-1.2.11
最后执行以后命令安装Nginx:
make
make install

 

6

Nginx配置
配置文件主要由三部分组成:
  • global(全区块)

  • event(事件块)

  • http(http块)

# global       //定义Nginx服务器整体运行的配置指令。
user nginx;
worker_processes  8;
error_log  logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid        logs/nginx.pid;
worker_rlimit_nofile 65535;
# event      //主要影响 Nginx 服务器与用户的网络连接。
events {
use epoll;
worker_connections  20480;
}
# http      //代理、缓存和日志定义等绝大多数功能和第三方模块的配置。
http {
include       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 $request_time;
proxy_buffer_size    32k;
proxy_buffers        4 64k;
proxy_busy_buffers_size 128k; #高负荷下缓冲大小
proxy_temp_file_write_size 128k; #缓存文件夹大小
proxy_connect_timeout 90; #代理连接超时间
proxy_read_timeout 90; #代理接收超时间
proxy_send_timeout 90; #后端服务器数据回传时间
server_names_hash_bucket_size 128; #服务器名字的hash表大小
keepalive_timeout 90; #长连接超时时间
large_client_header_buffers 4 32k;
client_header_buffer_size 32k;
client_max_body_size 16m;
client_body_buffer_size 128k;
server {
listen       10086;
server_name www.gz.10086.com;
location /10086 { #定义location
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#配置反向代理
proxy_pass http://135.10.100.90:8088;
}
}

7

nginx常用运维命令
  • 测试配置是否正确:


nginx -t | nginx -c nginx.conf -t


  • 启动nginx:


nginx | nginx -c nginx.conf


  • 停止nginx:


nginx -s stop


  • 重新加载nginx进程:


nginx -s reload


  • 其它控制指令:


nginx -s signal
   quit    #优雅的停止守护进程(SIGQUIT)
   reopen  #重新打开日志文件

8

nginx负载均衡使用
nginx的upstream负载均衡目前支持的几种负载均衡算法:
  • rr(默认):按客户端请求顺序把客户端的请求逐一分配到不同的后端节点服务器。

  • weight: 权重方式,数字越大,权重越大。

  • ip_hash:根据每个请求访问IP的hash结果分配。(会话保持)

  • url_hash: 根据访问的url的hash结果分配。(需hash软件包)

  • fair: 根据后端服务器响应时间最短请求智能分配。(upstream_fair模块)

参数:
  • weight:默认为1,weight越大,负载的权重就越大。

  • down:表示当前的server暂时不参与负载均衡。

  • backup:备份服务器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的访问压力最低。

  • max_fails:允许请求失败的最大次数,默认为1,当超过该值时,返回proxy_next_upstream模块定义的错误。

  • fail_timeout:请求失败超时时间,默认10是。表示如果某台服务器在fail_timeout时间内出现了max_fails次连接失败,则nginx会认为该server已失效,在接下来的fail_timeout时间内,nginx不再将请求发给失效的server。

upstream myapp1 {
192.168.100.111;
192.168.100.112;


9

nginx路由策略
location指令的作用是根据用户请求的URI来执行不同的应用,也就是根据用户请求的网站URL进行匹配,匹配成功即进行相关的操作。
=   开头表示精确匹配;
^~  开头表示uri以某个常规字符串开头,不是正则匹配;
~   开头表示区分大小写的正则匹配;
~*  开头表示不区分大小写的正则匹配;
/   通用匹配, 如果没有其它匹配,任何请求都会匹配到。
Location规则匹配优先级:

 


END




本文作者:陈洪刚

本文来源:IT那活儿(上海新炬王翦团队)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129515.html

相关文章

  • 前端性能优化与上线

    摘要:看下状态可以看到我已经有一些镜像了我已经删除了拉镜像正常即可,中间那段是中国镜像源,我们成功下来了的镜像。攻破像我这样屌丝的服务器一般都买的,大的资源文件不住,一个动辄的文件这很蛋疼,不上很难受。 4000字长文,多图预警!!!流量慎入!! 性能优化 - 屌丝前端性能优化、上线一条龙 大家好我又来了,本章给大家带来的内容是:上线和上线后的性能优化 项目地址 实战预览地址 实战项目地址...

    wupengyu 评论0 收藏0
  • 从小白程序员一路晋升为大厂高级技术专家我看过哪些书籍?(建议收藏)

    摘要:大家好,我是冰河有句话叫做投资啥都不如投资自己的回报率高。马上就十一国庆假期了,给小伙伴们分享下,从小白程序员到大厂高级技术专家我看过哪些技术类书籍。 大家好,我是...

    sf_wangchong 评论0 收藏0
  • 【备战春招/秋招系列】Java程序员必备书单

    摘要:相关推荐,豆瓣评分,人评价本书介绍了在编程中条极具实用价值的经验规则,这些经验规则涵盖了大多数开发人员每天所面临的问题的解决方案。实战高并发程序设计推荐豆瓣评分,书的质量没的说,推荐大家好好看一下。 该文已加入开源文档:JavaGuide(一份涵盖大部分Java程序员所需要掌握的核心知识)。地址:https://github.com/Snailclimb... 【强烈推荐!非广告!】...

    saucxs 评论0 收藏0
  • Java学习必备书籍推荐终极版!

    摘要:实战高并发程序设计推荐豆瓣评分书的质量没的说,推荐大家好好看一下。推荐,豆瓣评分,人评价本书介绍了在编程中条极具实用价值的经验规则,这些经验规则涵盖了大多数开发人员每天所面临的问题的解决方案。 很早就想把JavaGuide的书单更新一下了,昨晚加今天早上花了几个时间对之前的书单进行了分类和补充完善。虽是终极版,但一定还有很多不错的 Java 书籍我没有添加进去,会继续完善下去。希望这篇...

    Steve_Wang_ 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<