【原创】nginx入门

简介:     一、简介 Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。

 

 

一、简介

Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。2018年08月28日发布1.15.3版本。

其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。

二、功能概述

1、HTTP基础功能:

    处理静态文件,索引文件以及自动索引;

    反向代理加速(无缓存),简单的负载均衡和容错;

    FastCGI,简单的负载均衡和容错;

    模块化的结构。过滤器包括gzipping, byte ranges, chunked responses, 以及 SSI-filter 。在SSI过滤器中,到同一个 proxy 或者 FastCGI 的多个子请求并发处理;

    SSL 和 TLS SNI 支持;

2、IMAP/POP3 代理服务功能:

    使用外部 HTTP 认证服务器重定向用户到 IMAP/POP3 后端;

    使用外部 HTTP 认证服务器认证用户后连接重定向到内部的 SMTP 后端;

    认证方法:

    POP3: POP3 USER/PASS, APOP, AUTH LOGIN PLAIN CRAM-MD5;

    IMAP: IMAP LOGIN;

    SMTP: AUTH LOGIN PLAIN CRAM-MD5;

    SSL 支持;

    在 IMAP 和 POP3 模式下的 STARTTLS 和 STLS 支持;

3、支持的操作系统:

    FreeBSD 3.x, 4.x, 5.x, 6.x i386; FreeBSD 5.x, 6.x amd64;

    Linux 2.2, 2.4, 2.6 i386; Linux 2.6 amd64;

    Solaris 8 i386; Solaris 9 i386 and sun4u; Solaris 10 i386;

    MacOS X (10.4) PPC;

4、结构与扩展:

    一个主进程和多个工作进程。工作进程是单线程的,且不需要特殊授权即可运行;

    kqueue (FreeBSD 4.1+), epoll (Linux 2.6+), rt signals (Linux 2.2.19+), /dev/poll (Solaris 7 11/99+), select, 以及 poll 支持;

    kqueue支持的不同功能包括 EV_CLEAR, EV_DISABLE (临时禁止事件), NOTE_LOWAT, EV_EOF, 有效数据的数目,错误代码;

    sendfile (FreeBSD 3.1+), sendfile (Linux 2.2+), sendfile64 (Linux 2.4.21+), 和 sendfilev (Solaris 8 7/01+) 支持;

    输入过滤 (FreeBSD 4.1+) 以及 TCP_DEFER_ACCEPT (Linux 2.4+) 支持;

    10,000 非活动的 HTTP keep-alive 连接仅需要 2.5M 内存。

    最小化的数据拷贝操作;

5、其他HTTP功能:

    基于IP 和名称的虚拟主机服务;

    Memcached 的 GET 接口;

    支持 keep-alive 和管道连接;

    灵活简单的配置;

    重新配置和在线升级而无须中断客户的工作进程;

    可定制的访问日志,日志写入缓存,以及快捷的日志回卷;

    4xx-5xx 错误代码重定向;

    基于 PCRE 的 rewrite 重写模块;

    基于客户端 IP 地址和 HTTP 基本认证的访问控制;

    PUT, DELETE, 和 MKCOL 方法;

    支持 FLV (Flash 视频);

带宽限制;

三、安装与启动

命令:

yum install -y gcc gcc-c++  pcre pcre-devel zlib zlib-devel # 安装依赖

cd /usr/local/src

wget http://nginx.org/download/nginx-1.15.3.tar.gz # 下载源代码

tar -xvzf nginx-1.15.3.tar.gz

cd nginx-1.15.3

./configure --prefix=/usr/local/nginx

make && make install #编译、安装

启动:/usr/local/nginx/sbin/nginx

测试配置文件:/usr/local/nginx/sbin/nginx –t

重启:/usr/local/nginx/sbin/nginx -s reopen

重新载入配置文件:/usr/local/nginx/sbin/nginx -s reload

快速关闭:/usr/local/nginx/sbin/nginx -s stop

优雅关闭:/usr/local/nginx/sbin/nginx -s quit

访问:

http://192.168.141.130/

 

 

四、配置示例

1)、反向代理

正向代理-转发代理(forward proxy):

 

 

反向代理(reverse proxy):

 

 

配置:

    server {

        listen       80;

        server_name  fxdl.test.com;

 

        location /fxdl {

            proxy_redirect off;

            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://192.168.141.130:8080/fxdl;

        }

    }

  

2)、动静分离

 

 

配置:

    server {

        listen       80;

        server_name  djfl.test.com;

 

        location ^~ /static/

        {

            alias /usr/local/nginx/djfl/;

            break;

        }

 

        location /djfl {

            proxy_redirect off;

            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://192.168.141.130:8080/djfl;

        }

}

  

3)、负载均衡

 

 

配置:

upstream fzjh

{

    server 192.168.141.130:8080;

    server 192.168.141.130:9090;

}   

server

{

        listen       80;

        server_name  fzjh.test.com;

       

        location ^~ /static/

        {

            alias /usr/local/nginx/fzjh/;

            break;

        }

 

        location /fzjh {

            proxy_redirect off;

            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://fzjh/fzjh;

        }

    }

  

负载均衡算法:

Nginx的upstream目前支持以下几种方式的分配

(1)、轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

(2)、weight

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

(3)、ip_hash

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

(4)、fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

(5)、url_hash(第三方)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

4)、FastCGI

FastCGI是一个可伸缩地、高速地在HTTP服务器和动态脚本语言间通信的接口(FastCGI接口在Linux下是socket(可以是文件socket,也可以是ip socket)),主要优点是把动态语言和HTTP服务器分离开来。多数流行的HTTP服务器都支持FastCGI,包括Apache、Nginx和lightpd。

同时,FastCGI也被许多脚本语言所支持,比较流行的脚本语言之一为PHP。FastCGI接口方式采用C/S架构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或多个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程执行,然后将得到的结构返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。

FastCGI的重要特点:

1、FastCGI是HTTP服务器和动态脚本语言间通信的接口或者工具。

2、FastCGI优点是把动态语言解析和HTTP服务器分离开来。

3、Nginx、Apache、Lighttpd以及多数动态语言都支持FastCGI。

4、FastCGI接口方式采用C/S架构,分为客户端(HTTP服务器)和服务端(动态语言解析服务器)。

5、PHP动态语言服务端可以启动多个FastCGI的守护进程。

6、HTTP服务器通过FastCGI客户端和动态语言FastCGI服务端通信。

Nginx FastCGI的运行原理

Nginx不支持对外部动态程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。FastCGI接口在Linux下是socket(可以是文件socket,也可以是ip socket)。为了调用CGI程序,还需要一个FastCGI的wrapper,这个wrapper绑定在某个固定socket上,如端口或者文件socket。当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口,wrapper接收到请求,然后派生出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据发送给客户端,这就是Nginx+FastCGI的整个运作过程。

 

 

FastCGI的主要优点是把动态语言和HTTP服务器分离开来,是Nginx专一处理静态请求和向后转发动态请求,而PHP/PHP-FPM服务器专一解析PHP动态请求。

5)、rewrite

看下面两张图:

 

 

 

 

配置:

    server {

        listen       80;

        server_name  old.test.com;

       rewrite ^(.*)$  http://new.test.com$1 permanent;

       #return 301 http://new.test.com$request_uri;

    }

    server {

        listen       80;

        server_name  new.test.com;

 

 

        location / {

            root   html;

            index  index.html index.htm;

        }

    }

  

五、nginx和apache httpd服务器的对比

server

Apache

Nginx     

Proxy代理

非常好

非常好

Rewriter

非常好

Fcgi

不好

热部署

不支持

支持

系统压力比较

很大

很小

稳定性

非常好

安全性

一般

技术支持

非常好

很少

静态文件处理

一般

非常好

Vhosts虚拟主机

支持

不支持

反向代理

一般

非常好

Session sticky

支持

不支持

Apache和Nginx比较

功能对比

Nginx和Apache一样,都是HTTP服务器软件,在功能实现上都采用模块化结构设计,都支持通用的语言接口,如PHP、Perl、Python等,同时还支持正向和反向代理、虚拟主机、URL重写、压缩传输、SSL加密传输等。

  1. 在功能实现上,Apache的所有模块都支持动、静态编译,而Nginx模块都是静态编译的,
  2. 对FastCGI的支持,Apache对Fcgi的支持不好,而Nginx对Fcgi的支持非常好;
  3. 在处理连接方式上,Nginx支持epoll,而Apache却不支持;
  4. 在空间使用上,Nginx安装包仅仅只有几百K,和Nginx比起来Apache绝对是庞然大物。

Nginx相对apache的优点

  • 轻量级,同样起web 服务,比apache 占用更少的内存及资源
  • 静态处理,Nginx 静态处理性能比 Apache 高 3倍以上
  • 抗并发,nginx 处理请求是异步非阻塞的,而apache则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能。在Apache+PHP(prefork)模式下,如果PHP处理慢或者前端压力很大的情况下,很容易出现Apache进程数飙升,从而拒绝服务的现象。
  • 高度模块化的设计,编写模块相对简单
  • 社区活跃,各种高性能模块出品迅速啊

apache相对nginx的优点

  • rewrite,比nginx 的rewrite 强大
  • 模块超多,基本想到的都可以找到
  • 少bug,nginx的bug相对较多
  • 超稳定
  • Apache对PHP支持比较简单,Nginx需要配合其他后端用

选择Nginx的优势所在

  1. 作为Web服务器: Nginx处理静态文件、索引文件,自动索引的效率非常高。
  2. 作为代理服务器,Nginx可以实现无缓存的反向代理加速,提高网站运行速度。
  3. 作为负载均衡服务器,Nginx既可以在内部直接支持Rails和PHP,也可以支持HTTP代理服务器对外进行服务,同时还支持简单的容错和利用算法进行负载均衡。
  4. 在性能方面,Nginx是专门为性能优化而开发的,在实现上非常注重效率。它采用内核Poll模型(epoll and kqueue ),可以支持更多的并发连接,最大可以支持对50 000个并发连接数的响应,而且只占用很低的内存资源。
  5. 在稳定性方面,Nginx采取了分阶段资源分配技术,使得CPU与内存的占用率非常低。Nginx官方表示,Nginx保持10 000个没有活动的连接,而这些连接只占用2.5MB内存,因此,类似DOS这样的攻击对Nginx来说基本上是没有任何作用的。
  6. 在高可用性方面,Nginx支持热部署,启动速度特别迅速,因此可以在不间断服务的情况下,对软件版本或者配置进行升级,即使运行数月也无需重新启动,几乎可以做到7×24小时不间断地运行。

同时使用Nginx和Apache

由于Nginx和Apache各自的优势,现在很多人选择了让两者在服务器中共存。在服务器端让Nginx在前,Apache在后。由Nginx做负载均衡和反向代理,并且处理静态文件,讲动态请求(如PHP应用)交给Apache去处理。

 

作者: Candyメ奶糖

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
博文来源广泛,如原作者认为我侵犯知识产权,请尽快给我发邮件 359031282@qq.com联系,我将以第一时间删除相关内容。

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
3月前
|
存储 缓存 负载均衡
Nginx入门笔记
Nginx入门笔记
111 0
|
4月前
|
负载均衡 算法 应用服务中间件
Nginx+Tomcat实现反向代理与负载均衡入门
Nginx+Tomcat实现反向代理与负载均衡入门
183 0
|
4月前
|
负载均衡 网络协议 应用服务中间件
当当网266买来的1399页Nginx笔记,原来我入门都不算
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
当当网266买来的1399页Nginx笔记,原来我入门都不算
|
11月前
|
负载均衡 网络协议 Ubuntu
入门nginx
今天带大家一起学习一下nginx。 # 什么是nginx Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。 - Nginx其可以支持数以百万级别的TCP连接 - 开源 - 跨平台 - 稳定 - 反向代理 ## 正向代理与反向代理 什么是正向代理呢?正向代理就是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真
|
网络协议 Ubuntu 关系型数据库
树莓派ubuntu20.04+Docker+Nginx+Wordpress个人网站搭建全纪录(超详细,入门友好篇)
前言: 本文基于树莓派4B平台,搭载Ubuntu Server 20.04 LTS版本服务器系统,通过将树莓派服务器连接Ipv6公网网络,利用Docker工具,部署Nginx反向代理与Wordpress网站管理系统,实现网站搭建与异地访问。同时用到了域名管理、DDNS、MySQl等工具。本文将从服务器镜像烧录开始,将网站搭建过程进行完整的说明记录。 (经验来自互联网,多次试错学习后总结如下,以供参考。) 关键词: 树莓派; Ubuntu ; Ipv6 ;Docker
509 0
树莓派ubuntu20.04+Docker+Nginx+Wordpress个人网站搭建全纪录(超详细,入门友好篇)
|
前端开发 应用服务中间件 API
Nginx入门及如何反向代理解决生产环境跨域问题
Nginx入门及如何反向代理解决生产环境跨域问题
|
域名解析 负载均衡 应用服务中间件
Nginx基本入门
Nginx基本入门
91 0
Nginx基本入门
|
关系型数据库 MySQL 应用服务中间件
入门 - Docker将nginx容器和php容器关联起来
新建完文件后就可以开启容器了,开启后应该就正常了,访问你的服务器ip(默认就是80端口,应该就可以正常访问nginx) 然后在刚刚的主机目录/home/wwwroot/下新建一个目录default (因为在nginx里设置的默认目录,可以自己修改) 然后新建test.php 写入php代码测试运行。
391 0
|
消息中间件 编解码 JSON
Kafka、Logstash、Nginx日志收集入门
Kafka、Logstash、Nginx日志收集入门
189 0
|
负载均衡 前端开发 应用服务中间件
Nginx入门使用介绍
简单介绍Nginx基础知识
168 0