一、Nginx安装:

采取手动编译安装

对多种重要的选项进行配置

安装前提:常用工具和库,GCC PCRE(Rewrite模块需要) pcre-devel(源码) zlib zlib-devel(源码) OpenSSL openssl-devel(源码)

配置选项

./configure --help列出有效的配置开关变量

--prefix= 指定安装Nginx的基础目录 ,默认值/usr/local/nginx. 在配置是使用了相对路径,则连接到基础目录。例如--conf-path=conf/nginx.conf

--sbin-path= nginx二进制文件的安装的路径。<prefix>/sbin/nginx

--config-path= 主要配置文件的放置目录。 <prefix> /conf/nginx.conf

--erro-log-path=错误日志存放的路径。<prefix>/logs/error.log

--pid-path=Nginx的pid文件路径<prefix>/logs/nginx.pid 对于Nginx来说用于确定该进程没有被启动两次

--with-perl_modules_path= 定义 Perl 模块的路径。如果需要包含另外的Perl模块,必须定义该参数

--with-perl=..perl 二进制文件的路径,用于执行Perl脚本。如果想执行一个Perl脚本,必须设置该路径

--http-log-path = ...定义被访问文件的日志存放路径。<prefix>/logs/access.log

--http-client-body-temp-path=...改目录存储客户端请求产生的临时文件 <prefix>/client_body_temp

--http-proxy-temp-path=...该目录用于代理存储临时文件<prefix>/proxy_temp

--http-fastcgi-temp-path=...指定用于Fast FastCGI 模块使用的临时文件的存放 <prefix>/fastcgi_temp

--builddir=...指定创建应用程序的位置

先决条件选项:

编译选项:

--with-cc=.. 指定一个备用的C编译器位置

--with-cpp ~C预处理器~

--with-cc-opt=.. 定义一个额外的选项,然后在命令行传递给C编译器

--with-ld-opt ~传递给C连接器~

--with-cpu-opt=.. 指定不同的目标处理器结构

PCRE选项:

--without-pcre 不使用pcre库

--with-pcre 强制使用pcre库

--with-pcre=.. 允许指定pcre库的源代码

--with-pcre-opt= 用于建立pcre库的其他选项

MD5选项:

--with-md5= 指定MD5源代码路径

--with-md5-opt=

--with-md5-asm=建立MD5库使用汇编语言源代码

SHA1选项:

--with-sha1=

--with-sha1-opt=

--with-sha1-asm=

zlib选项:

--with-zlib=

--with-zlib-opt=

--with-zlib-asm=

openssl选项:

--with-openssl=

--with-openssl-opt=

模块选项:

(一些模块是默认开启,一些需要手动开启)

默认开启的模块:

--without-http_charset_module 禁用Charset模块,该模块用于对网页重新编码

--without-http_gzip_module 禁用Gzip压缩模块

--without-http_ssi_module 禁用服务器端包含模块

--without-http_userid_module 禁用用户ID模块,该模块为用户通过cookie验证身份

--without-http_access_module 禁用访问模块,对于指定的IP段,允许访问配置

--without-http_auth_basic_module 禁用基本的认证模块

--without-http_autoindex_module 禁用自动索引模块

--without-http_geo_module 禁用Geo模块,该模块允许你定义依赖于IP地址段的变量。

--without-http_map_module 禁用Map模块,该模块允许你声明map区段

--without-http_referer_module 禁用Referer控制模块

--without-http_rewrite_module 禁用Rewrite模块

--without-http_proxy_module 禁用代理模块,该模块用于向其他服务器传输请求

--without-http_fastcgi_module 禁用FastCGI模块。该模块是用于与FastCGI进程配合工作

--without-http_memcached_module 禁用Memcached 模块。该模块是用于与memcached守护进程配合工作。

--without-http_limit_zone_module 禁用Limit Zone 模块。该模块是用于根据定义的Zone来限制约束对资源的使用

--without-http_limit_req_module 禁用Limit Request 模块。该模块允许你限制每个用户请求的总数

--without-http_empty_gif_module 禁用Empty Gif 模块,该模块用于在内存中提供一个空白的GIF图像

--without-http_browser_module 禁用Browser模块,该模块用于解释用户代理字符串

--without-http_upstream_ip_hash_module 禁用Upstream 模块,该模块用于配置负载均衡结构

默认禁用的模块:

--with-http_ssl_module 开启SSL模块,支持使用HTTPS协议的网页

--with-http_realip_module 开启Real IP的支持,该模块用于从客户端请求的头数据读取real IP地址。

--with-http_addition_module 开启Addition 模块,该模块允许你追加或前置数据(prepend data)到响应的主体部分

--with-http_xslt_module 开启XSLT模块的支持,该模块实现XSL转化XML文档

--with-http_image_filter_module 开启Image Filter模块,该模块是让你修改图像。注意:如果想编译该模块,需要在系统中安装libgd库

--with-http_geoip_module 开启GeoIP模块,该模块通过使用MaxMind's GeoI 二进制数据库来获取客户端在地里上的分布。需要安装libgeoip库

--with-http_sub_module 开启Substitution模块,该模块用于在网页中替换文本

--with-http_dav_module 开启WebDAV模块(Distribute Authoring and Versioning via Web)

--with-http_flv_module 开启FLV模块,该模块用于专门处理.flv(falsh视频)文件

--with-http_gzip_static_module 开启Gzip静态模块,该模块用于发送预压缩的文件

--with-http_random_index_module 开启Random Index模块,该模块用于挑选一个随机的文件作为该目录的Index

--with-http_secure_link_module 开启Secure Link模块,该模块用于在URL中检测关键字的存在

--with-http_stub_status_module 开启Stub Status模块,该模块会产生一个服务器状态和信息页

--with-google_perftools_module 开启Google性能工具模块

杂项(例如邮件代理服务功能或时间管理功能)

--------------

Nginx命令行选项

启动和停止守护进程

nginx -s stop 立即停止守护进程(使用TERM信号)

nginx -s quit 温和地停止守护进程(使用QUIT信号)

nginx -s reopen 重新打开日志文件

nginx -s reload 重新载入配置文件

测试配置文件是否有效:nginx -t -c(测试临时的配置文件)

nginx -g 用于指定额外的配置命令

将Nginx添加为系统服务

建立Nginx的init脚本,保存到init.d目录下

安装Nginx的init脚本,授予该脚本可执行权限

让脚本自动启动:

基于Debian的发布: update -rc.d -f nginx defaults

基于Red hat的发布:chkconfig --add nginx (--list nginx)检查该服务的运行级别

配置文件

配置机制:指令、模块(block)、整体逻辑结构

在http区段,可以声明一个或多个server区段,一个server允许配置一个虚拟主机。

在server区段,可以插入一个或多个location区段,当需要对特定URI进行匹配时,这些location区段允许对这些路径单独设置。

在一个区段嵌套的其他区段,那么被嵌套的区段会继承其父区段的设置。

指令值单位 字节单位和时间单位

变量

字符串值:包含特殊符号,用引号括起来

基本模块指令

基本模块:提供的指令允许你定义的Nginx基本功能的变量,在编译时不能被禁用,因此他们提供的指令和区段总是有效

核心模块(Core module):基本特征和指令,例如进程管理和安全

事件模块(Events module):可以在Nginx内部机制配置网络使用能力

配置模块(Configuration module):提供包含机制

Nginx的进程结构

启动Nginx,有一个独一无二的内存--master主进程。master进程本身不处理任何客户端的请求,它的功能是用来产生进程----worker进程,这些worker进程以在配置文件中指定的用户和用户组来运行,可以大量worker进程以及每个worker进程的最大连接数。

核心模块指令必须放置在文件根部(配置文件的开始部分),而且只能使用一次

Events模块:与该模块提供的指令可以用来配置网络机制,指令的一些参数会对Nginx应用程序的性能产生重要影响

Configuration模块:是一个简单的模块,它提供的include指令能够将其他文件包含在Nginx配置文件中。

平滑升级Nginx(避免丢失连接)

HTTP配置

HTTP核心模块

http 该区段嵌入嵌入配置文件的根部,在这个区段中允许定义指令和嵌入HTTP相关模块的区段。

server 这个区段允许你声明一个站点 。该区段只能用在http区段中

location 定义一组设置,应用于网站的一个特定位置。该区段能够用于server区段,也能够嵌套在其它location中

在这三个层次中的每一个层次中,都可以插入指令,这些指令将影响web服务器的行为。

Nginx提供的服务,可以通过三个级别调整配置文件:在协议级别(http区段)、在server级别(server区段)及在请求的URI级别(location区段)

location 修饰符:

= URI 的定位必须与指定的模式精确匹配。该模式在这里限定为一个简单的文本字符串,不能用正则表达式。

(无) URI的定位必须以指定模式开始,不可以使用正则表达式

~ 客户端请求的URI与指定的正则表达式匹配,必须区分大小写

~* 对客户端请求的URI与指定的正则表达式匹配,必须不区分大小写

^~ 类似于无标志行为,URI的定位必须以指定模式开始。不同的,如果模式匹配,那么Nginx就停止搜索其他模式

@定义命名location区段,这些区段客户端不能访问,只可以由内部的请求来访问。

模块变量:

客户端请求头的值

发送响应头中的值

Nginx产生的各种变量

Rewrite 模块:

正则表达式:
元字符,量词,捕获

这些被捕获的数据(这些数据均放在缓冲区中),可以用于后面的指令。

内部请求:Nginx区分外部请求和内部请求。外部请求直接源于客户端,URI尽量与location区段匹配。

内部请求会被Nginx通过特定的指令触发。在默认的Nginx模块中,有些内部指令有能力处理内部请求:error_page,index,rewrite,

try_files,add_before_body,add_after_body,include,SSI命令,等等。

两种不同类型的内部请求:

内部重定向:Nginx在内部重定向客户端的请求。

子请求:另外一种触发内部请求而产生内容的是子请求。

error_page

rewrite

如果希望Nginx在改写的URI中不包含参数那么在替代的URI结尾插入一个“?”字符

服务器端包含SSI

条件结构:rewrite模块引进了一组新的指令和区段,其中之一就是if条件结构

限制与约束

auth_basic模块

 Access 模块

两个重要指令:allow 和 deny,允许你通过指定IP或IP范围来允许或拒绝被访问的资源。

语法:

allow  IP | CIDR | all     CIDR:IP范围。all 表示所有客户端的IP。

规则的处理顺序为自上而下(开始的指令优先)

Limit zone模块

允许定义一个zone,然后通过限制该zone而达到限制服务器的最大并发连接数。

Limit request 模块

允许你限制被定义的zone的请求总数

内容与编码

 empty_gif模块:从内存提供一个1x1的透明gif图片

FLV模块

HTTP Header模块:该模块提供了两个指令,它们会影响发送到客户端的响应头

add_header name value

expires 允许控制发送到客户端 Expires和 Cache-Control HTTP header的值

Addition模块:允许你(通过简单指令)在HTTP响应之前或者之后添加内容

Substitution模块:顺着前面模块的路线,Substitution 模块允许你从响应体中查找和直接替换文本

 Gzip filter 模块:该模块允许你在将响应体发送到客户端之前将响应体利用Gzip 算法压缩

 Gzip static模块:该模块为Gzip过滤机制添加一个简单的功能--当gzip_static指令(on 或 off)开启,Nginx将自动查找.gz文件,先查找下,是否有该文件

的压缩形式文件。

Charset filter模块:可以更精确地控制响应体的字符集

Memcached模块:Memcached是一个通过守护进程方式来运行的应用程序,它能够通过套接字连接。提供一个高效的分布式键/值的内存缓存系统。

Image filter 模块: 提供图像处理功能

XLST模块:允许对XML文件或者后台服务器(代理和FastCGI)收到的响应应用XSLT转换

--------------------------------------------

CGI 通用网关接口:CGI是一个协议,它描述了web服务器与应用程序网关(PHP、python,等等)之间的信息交换。

定义:按照RFC3875的规定(CGI protocol v1.1),通用网关接口(CGI)允许一个HTTP服务和CGI脚本负担责任------响应客户端的requests.[...].

服务器(Nginx)响应管理连接、数据传送、传输及客户端相关的网络问题,而CGI脚本处理诸如数据访问和文档处理等应用程序问题。

CGI 存在的缺点(如每个请求产生一个唯一进程),产生了由CGI到FastCGI的演变。

FastCGi与Nginx的和谐共处有FastCGI模块来完成。

FastCGI模块 主要指令:

fastcgi_pass:使用环境location,if       指定什么请求应该传递给 FastCGI 服务器

fastcgi_param:   location,http,server  允许配置传递给FastCGI 服务器的请求参数

fastcgi_pass_header  指定传递到FastCGI服务器额外的头(header)信息。

fastcgi_hide_header 指定FastCGI服务器应该隐藏的头信息(即Nginx没有转发的头信息)

fastcgi_index FastCGI  不支持自动目录索引----如果URI请求以/结尾,Nginx会将fastcgi_index指定的值附加在 / 之后

fastcgi_ignore_client_abort

fastcgi_intercept_errors  定义Nginx 是否处理网关返回的错误或直接向客户端返回错误页

fastcgi_read_timeout     定义应用程序 FastCGI 的响应超时时间。如果在这个时间段内 Nginx没有收到响应,则返回 “504 Gateway Timeout”

的HTTP 错误。

fastcgi_connect_timeout  定义后端服务器连接超时

fastcgi_send_timeout 定义发送数据到后台服务器的超时时间

fastcgi_split_path_info  这个指令对于以下形式的URL 特别有用

fastcgi_store 用于开启或禁用简单的缓存存储,用于存储FastCGI应用程序的响应,作为文件存储在驱动器上,再有同样的URI请求时,文档就直接从缓存中提供,而不用再将请求发送到FastCGI应用程序。

fastcgi_store_access 该指令定义在使用环境中对缓存文件的访问权限。

fastcgi_temp_path 设置临时文件和缓存文件的路径

fastcgi_max_temp_file_size 指定临时文件的最大值。

fastcgi_max_temp_write_size  提供使用存储驱动器上的临时文件时,需要设置写缓冲区的大小,该指令就是来完成这个工作的

fastcgi_buffers 设置缓冲区的数量和大小,用于从FastCGI应用程序读取响应数据

fastcgi_buffers_size 设置缓冲区的大小,用于读取从FastCGI应用程序响应数据包开始的部分,通常包含简单的头数据

......

FastCGI 缓存

fastcgi_cache 定义一个cache区域(zone)。对区域(zone)定义标识符为了进一步在其他指令中使用

fastcgi_cache_key 定义缓存key,为了区分不同的缓存条目

fastcgi_cache_min_uses 定义一个请求有资格缓存之前被击中的最少次数,默认一个请求的响应一次被击中就会被缓存

fastcgi_cache_path 指定用于存储缓存文件的目录。也包括其他参数

fastcgi_cache_use_stale 定义Nginx在某些情况下(关于网关)是否提供过期的缓存数据。

fastcgi_cache_valid 允许你对不同的响应代码定制不同的缓存时间

Upstream模块:

该模块允许你声明命名upstream区段来定义一个服务器列表(负载均衡)

存在session共享的问题

要确定同一个访问者发出的请求总是由同一个后端服务器来处理,可以使用ip_hash选项,在upstream区段中声明即可.

(ip_hash并不能完全保证客户端总能连接到同一台upstream服务器)

server指令:参数

weight=n 表示这个服务器的权重

max_fails=n 定义可以发生通信错误的最大次数(在fail_timeout定义的时间参数内)

fail_timeout=n

down 标记一个后端服务器为离线状态 ,不使用该服务器

backup 标记一个后端服务器为备份服务器,Nginx不会使用该服务器直到其他服务器全部宕机或无效时才启用

Nginx作为反向代理

反响代理机制

Nginx 放在前端,作为前端服务器(换句话说,作为反向代理),接收从外面进来的所有请求,他会对请求进行过滤,如果请求的资源是静态文件,则直接由Nginx提供给客户端,请求的资源是动态页面,则转发给后端服务器。

后端服务器只与Nginx通信。它可以与前端服务器位于同一台计算机上,也可以在不同的机器上使用多个后端服务器(使用upstream区段)以便负担负载

两个进程的通信兵没有使用FastCGI,Nginx充当的是一个简单的代理服务器:它从客户端收到HTTP请求并且转发到后端服务器(充当一个HTTP客户端)。因此这里没有使用新的协议或复杂的软件,这种机制由Nginx提供的代理(Proxy)模块来实现。

Nginx代理模块

主要指令:

proxy_pass 在location指定转发到后端服务器的请求

proxy_method 允许主要的http请求方法转发到后端服务器

proxy_hide_header 转发至客户端响应时,隐藏更多的客户端头行

proxy_pass_header 结合前面的命令。该指令强制一些被忽略的头传递到客户端

proxy_redirect  允许改写出现在HTTP头却被后端服务器触发重定向的URL

off 重定向被转到实际的位置

proxy_next_upstream proxy_pass连接到一个upstream块的时候,该指令指定在某种情况,请求资源放弃并且重新发送到下一个该区段的下一个upstream server

缓存、缓冲和临时文件

proxy_buffer_size   设置缓冲区的大小,该缓冲区用于存放读取来自后端服务器响应数据的开始部分,通常包含简单的头数据

proxy_buffering  定义是否缓冲后端服务器的响应,如果设置为on,那么Nginx将把响应存储在内存中,使用内存空间来提供缓冲.如果缓冲用完,响应数据就存储到临时文件。

proxy_buffers 设置缓冲数量和大小,用于存放从后端服务器读取的响应数据

proxy_busy_buffers_size 在缓冲区中,收到的后端数据堆积超过该指令指定的数值时缓冲区会被刷新,并且数据被发送到客户端

proxy_cache 定义一个缓存zone。指定zone的标识符,以便将来的指令使用

proxy_cache_key 定义缓存key

proxy_cache_path 指出用于存放缓存文件的目录

proxy_cache_methods 定义有资格缓存的HTTP方法

proxy_cache_min_uses 定义一个请求有资格缓存之前被击中的最少次数

。。。。

限制、超时设定和错误 指令

proxy_connect_timeout 定义后端服务器连接超时

。。。

其它指令

。。。

高级配置:

可以新建一个proxy.conf文件,用include导入

对于一些设置的建议值

proxy_redirect off; 设置为off后,让Nginx以 “as it is ” 方式重定向到客户端,即对响应本身不做任何处理。

proxy_set_header Host $host; 转发到后端服务器的请求中的Host HTTP头默认为代理的主机名。这样的设置令Nginx可以换而使用客户端请求中的原始主机名

proxy_ser_header X-Real-IP $remote_addr; 由于后端服务器从Nginx收到请求,所以这是与后端服务器通讯的IP将是Nginx的IP地址而不是原始客户端的IP地址,使用这种设置能够转发真实的客户端IP地址,使用这种设置能够转发真实的客户端IP地址到一个新的头,即X-Real-IP头

proxy_set_header  X-Forwarded-For $proxy_add_x_forworded_for; 来确保用于套接字通信的IP地址,可能是原始客户端的IP地址(代理后面的客户端)转交到后端服务器

client_max_body_size 10m; 限制客户端请求体的最大值为10M。这里设置的值只是一个参考值,请确保调整的值与后端服务器的水平相同。否则一个正确收到请求的(被Nginx处理后)将不能够成功的转发到后端服务器。

client_body_buffer_size 128k; 定于用于持有请求体(Request body)内存缓冲区的大小,超过该值后,内容就被保存到临时文件中

proxy_connect_timeout 15;如果与代理服务器协同工作的后端服务器在本地网络,请务必保持此值尽可能低(这个值取决于平均负荷),指令的最大值是75秒

proxy_send_timeout 15;

proxy_read_timeout 15;

241

Nginx HTTP Server相关的更多相关文章

  1. nginx多server配置记录

    直接在配置文件(/etc/nginx/nginx.conf)中添加如下代码: server { listen 8080; server_name 192.168.100.174:8080; root ...

  2. 【笔记】Nginx热更新相关知识

    (以下学习笔记内容均摘自参考链接,仅供个人查阅)   1.inotify文件系统监控特性 Inotify 是一个 Linux 内核特性,它监控文件系统,并且及时向专门的应用程序发出相关的事件警告,比如 ...

  3. NGINX Web Server Nginx web server

    原文地址:http://nginx.com/resources/admin-guide/web-server/ NGINX Web Server Nginx web server This secti ...

  4. Linux centos VMware Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

    一.Nginx防盗链 配置如下,可以和上面的配置结合起来 location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|x ...

  5. Nginx搭建与相关配置

    目录 一.Nginx简介 1.1 概述 1.2 Nginx与Apache的差异 二.编译安装Nginx服务 2.1 将nginx软件包传到主机/opt目录下 2.2.安装依赖包 2.3.添加模块编译安 ...

  6. SQL Server相关书籍

    SQL Server相关书籍 (排名不分先后) Microsoft SQL Server 企业级平台管理实践 SQL Server 2008数据库技术内幕 SQL Server性能调优实战 SQL S ...

  7. Nginx 参数配置相关

    Nginx参数配置相关 by:授客 QQ:1033553122 目的: 对Nginx配置的点滴学习总结,主要目的在于分析Nginx与性能相关的一些参数设置,以便性能调优时选择最优配置   环境: $ ...

  8. springboot配置server相关配置&整合模板引擎Freemarker、thymeleaf&thymeleaf基本用法&thymeleaf 获取项目路径 contextPath 与取session中信息

    1.Springboot配置server相关配置(包括默认tomcat的相关配置) 下面的配置也都是模板,需要的时候在application.properties配置即可 ############## ...

  9. nginx: [emerg] BIO_new_file("/etc/nginx/ssl_key/server.crt") failed (SSL: error:02001002:syste

    Centos 7.5 nginx+web集群配置https报错 报错信息: [root@lb01 conf.d]# nginx -tnginx: [emerg] BIO_new_file(" ...

随机推荐

  1. Web安全系列(二):XSS 攻击进阶(初探 XSS Payload)

    什么是 XSS Payload 上一章我谈到了 XSS 攻击的几种分类以及形成的攻击的原理,并举了一些浅显的例子,接下来,我就阐述什么叫做 XSS Payload 以及从攻击者的角度来初探 XSS 攻 ...

  2. 高性能HTTP加速器Varnish安装与配置(包含常见错误)

    Varnish是一款高性能的开源HTTP加速器.挪威最大的在线报纸Verdens Gang使用3台Varnish取代了原来的12台Squid,性能竟然比曾经更好.Varnish 的作者Poul-Hen ...

  3. js高度line-height及宽度text-align:center居中插件

    1.高度居中---在高度设为100%,无法直接使用line-height:100%;会不起效果 这是用于应对height:100%的插件 /** * 高度居中函数,用于应对高度设为100%时的居中 * ...

  4. 小鬼PSer

    我是小鬼PSer,主要修图和做网站的,有需要可以call QQ:1805843351 微信:1805843351

  5. (转)ConcurrentModificationException异常原因和解决方法

    原文地址: http://www.cnblogs.com/dolphin0520/p/3933551.html 一.ConcurrentModificationException异常出现的原因 先看下 ...

  6. async & await (转载)

    async 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是async的味道了.但是这也给我们 编程埋下了一些 ...

  7. HTML5+ Android打包证书

    HBuilder默认App云端打包默认使用的是DCloud公用证书,其信息如下: MD5: 59:20:1C:F6:58:92:02:CB:2C:DA:B2:67:52:47:21:12 SHA1:B ...

  8. ME11创建信息记录 Function

    转自 http://blog.csdn.net/zeewjj/article/details/7941530  CALL FUNCTION 'ME_DIRECT_INPUT_INFORECORD' D ...

  9. mongoDB多级子文档查询

    db.getCollection('product').find({'coverage':{'$elemMatch':{'plan':{'$elemMatch':{'iscoverage':{'$in ...

  10. 【Leetcode-easy】ZigZag Conversion

    思路1:String[numRow]行字符串数组.读取原始字符串每一个字符,设置行变量 nrow和行标志位flag(向下一行为1或向上一行为-1).将该字符连接到数组中对应的行字符串,同时nrow+= ...