Ngnix_高性能HTTP和反向代理服务器简介

点击上 方蓝字「开源文摘」一键关注

Nginx (发音同"engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。

Nginx是由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。目前(2017年4月),最新稳定版本为1.12.0.

Nginx的特点是占有内存少,并发能力强。中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

Nginx的优势

1.支持高并发连接

由于apache采用的是select网络I/O模型,Ngnix在处理大量连续高并发访问时效率要比Apache高很多。可通过top命令可以查看系统负载和CPU使用率

2.内存消耗少

在服务器3W并发连接下,开启10个Nginx进程消耗150MB内存(15MB*10),开启64个php-cgi进程消耗128MB内存(20MB*64),共消耗不到2GB内存。可以使用压力测试工具webbench对Nginx进行压力测试。

3.成本低廉

购买F5 BIG-IP、NetScaler等负载均衡交换机需要几十万RMB,而开源Nginx替代这些商业设备。

4.支持热部署

能够在不间断服务的情况下、对软件版本进行升级

5.配置简单

6.其他优势

支持rewrite重写规则,能够根据域名、URL的不同、将HTTP请求分发到不同的后端服务器群组;内置的健康检查功能;节省带宽,支持GZIP压缩,可以添加浏览器本地缓存的Header头。

Nginx作为静态HTTP服务器

与Apache类似,Ngnix可以作为静态的HTTP服务器,将服务器上的静态文件(如HTML、图片)通过HTTP协议展现给客户端。

示例配置:

server {    listen 80; # 端口号    location / {        root /usr/share/nginx/html; # 静态路径    }}    

Nginx作为反向代理服务器

客户端(即浏览器)可以通过HTTP协议直接访问网站应用服务器。如果网站管理员在中间加上一个Nginx,客户端请求发送给Nginx服务器,Nginx再向网站应用服务器发送请求,然后Ngnix再将请求的结果返回给客户端,此时Nginx充当反向代理服务器。

示例配置:

server {

    listen 80;    location / {        proxy_pass :8080; 

        # 应用服务器HTTP地址    }}    

Ngnix作为负载均衡器

当网站访问量非常大时,单台服务器已经无法满足访问需求。负载均衡器可以将相同的Web应用部署在多台服务器上,把大量用户的请求分配给多台机器处理。当其中一台服务器失效(死机或者关机),只要还有其他服务器正常运行,就不会影响用户使用。Nginx可以通过反向代理来实现上述负载均衡器的效果。

示例配置:

upstream myapp {    server 192.168.0.111:8080; # 应用服务器1    server 192.168.0.112:8080; # 应用服务器2}server {    listen 80;    location / {    proxy_pass ;    }}

Ngnix作为虚拟主机

与Apache类似,Ngnix也可以通过HTTP请求头中的Host是否匹配server_name来实现的虚拟主机。

示例配置:将www.aaa.com和www.bbb.com两个网站部署在同一台服务器上,两个域名解析到同一个IP地址,但是用户通过两个域名却可以打开两个完全不同的网站。

server {    listen 80 default_server;    server_name _;    return 444; 

    # 过滤其他域名的请求,返回444状态码}server {    listen 80;    server_name www.aaa.com; 

    # www.aaa.com域名    location / {        proxy_pass :8080; 

        # 对应端口号8080    }}server {    listen 80;    server_name www.bbb.com; 

    # www.bbb.com域名    location / {    proxy_pass :8081; 

    # 对应端口号  8081    }}

通过FASTCGI支持动态脚本语言

与Apache类似,Nginx本身不支持PHP等动态脚本编程语言,但是它可以通过FastCGI来将请求扔给某些语言或框架处理(例如PHP、Python、Perl)。

示例配置:配置中将.php结尾的请求通过FashCGI交给PHP-FPM处理。PHP-FPM是PHP的一个FastCGI管理器。

server {    listen 80;    location ~ \.php$ {    include fastcgi_params;    fastcgi_param SCRIPT_FILENAME /PHP文件路径$fastcgi_script_name; 

    # PHP文件路径    fastcgi_pass 127.0.0.1:9000; 

    # PHP-FPM地址和端口号

    # 另一种方式:fastcgi_pass unix:/var/run/php5-fpm.sock;    }}

fastcgi_pass和proxy_pass有什么区别

关注开源文摘,每天五分钟轻松成为开源技术专家!

如果觉得文章有用,分享到朋友圈吧

长按下方二维码关注 “开源文摘”