Nginx HTTP Server相关
一、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相关的更多相关文章
- nginx多server配置记录
直接在配置文件(/etc/nginx/nginx.conf)中添加如下代码: server { listen 8080; server_name 192.168.100.174:8080; root ...
- 【笔记】Nginx热更新相关知识
(以下学习笔记内容均摘自参考链接,仅供个人查阅) 1.inotify文件系统监控特性 Inotify 是一个 Linux 内核特性,它监控文件系统,并且及时向专门的应用程序发出相关的事件警告,比如 ...
- NGINX Web Server Nginx web server
原文地址:http://nginx.com/resources/admin-guide/web-server/ NGINX Web Server Nginx web server This secti ...
- Linux centos VMware Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理
一.Nginx防盗链 配置如下,可以和上面的配置结合起来 location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|x ...
- Nginx搭建与相关配置
目录 一.Nginx简介 1.1 概述 1.2 Nginx与Apache的差异 二.编译安装Nginx服务 2.1 将nginx软件包传到主机/opt目录下 2.2.安装依赖包 2.3.添加模块编译安 ...
- SQL Server相关书籍
SQL Server相关书籍 (排名不分先后) Microsoft SQL Server 企业级平台管理实践 SQL Server 2008数据库技术内幕 SQL Server性能调优实战 SQL S ...
- Nginx 参数配置相关
Nginx参数配置相关 by:授客 QQ:1033553122 目的: 对Nginx配置的点滴学习总结,主要目的在于分析Nginx与性能相关的一些参数设置,以便性能调优时选择最优配置 环境: $ ...
- springboot配置server相关配置&整合模板引擎Freemarker、thymeleaf&thymeleaf基本用法&thymeleaf 获取项目路径 contextPath 与取session中信息
1.Springboot配置server相关配置(包括默认tomcat的相关配置) 下面的配置也都是模板,需要的时候在application.properties配置即可 ############## ...
- 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(" ...
随机推荐
- Web安全系列(二):XSS 攻击进阶(初探 XSS Payload)
什么是 XSS Payload 上一章我谈到了 XSS 攻击的几种分类以及形成的攻击的原理,并举了一些浅显的例子,接下来,我就阐述什么叫做 XSS Payload 以及从攻击者的角度来初探 XSS 攻 ...
- 高性能HTTP加速器Varnish安装与配置(包含常见错误)
Varnish是一款高性能的开源HTTP加速器.挪威最大的在线报纸Verdens Gang使用3台Varnish取代了原来的12台Squid,性能竟然比曾经更好.Varnish 的作者Poul-Hen ...
- js高度line-height及宽度text-align:center居中插件
1.高度居中---在高度设为100%,无法直接使用line-height:100%;会不起效果 这是用于应对height:100%的插件 /** * 高度居中函数,用于应对高度设为100%时的居中 * ...
- 小鬼PSer
我是小鬼PSer,主要修图和做网站的,有需要可以call QQ:1805843351 微信:1805843351
- (转)ConcurrentModificationException异常原因和解决方法
原文地址: http://www.cnblogs.com/dolphin0520/p/3933551.html 一.ConcurrentModificationException异常出现的原因 先看下 ...
- async & await (转载)
async 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是async的味道了.但是这也给我们 编程埋下了一些 ...
- HTML5+ Android打包证书
HBuilder默认App云端打包默认使用的是DCloud公用证书,其信息如下: MD5: 59:20:1C:F6:58:92:02:CB:2C:DA:B2:67:52:47:21:12 SHA1:B ...
- ME11创建信息记录 Function
转自 http://blog.csdn.net/zeewjj/article/details/7941530 CALL FUNCTION 'ME_DIRECT_INPUT_INFORECORD' D ...
- mongoDB多级子文档查询
db.getCollection('product').find({'coverage':{'$elemMatch':{'plan':{'$elemMatch':{'iscoverage':{'$in ...
- 【Leetcode-easy】ZigZag Conversion
思路1:String[numRow]行字符串数组.读取原始字符串每一个字符,设置行变量 nrow和行标志位flag(向下一行为1或向上一行为-1).将该字符连接到数组中对应的行字符串,同时nrow+= ...