nginx搭建web服务器搭建v2ray服务器免流


这里将Nginx的一些配置进行整合。根据导航比较容易找到对应的文档。资料来自于weixueyuan

HTML是一种标记语言,提供HTML文件读取是静态服务器最基本的功能,静态服务器的配置样例如下:

在以上配置中,每个server指令域等同于一个虚拟服务器,每个location指令域等同于一个虚拟目录。

在对外分享文件时,利用Nginx搭建一个简单的下载文件管理服务器,文件分享就会变得非常方便。利用Nginx的诸多内置指令可实现自动生成下载文件列表页、限制下载带宽等功能。配置样例如下:

Nginx可以通过SSI命令将多个超文本文件组合成一个页面文件发送给客户端。SSI(ServerSideInclude)是一种基于服务端的超文本文件处理技术。由于SSI仍是通过其他动态脚本语言获取动态数据的,所以此处将其归类为伪动态服务功能。

SSI服务器可通过SSI命令实现诸多动态脚本语言的HTML模板功能,配合其他动态脚本服务的API,完全可以实现前后端分离的Web应用。

Nginx是通过ngx_对HTTPS的配置进行安全性检测,并按照测试结果有针对性地进行优化。

Nginx的FastCGI模块默认编译在Nginx的二进制文件中,无须单独编译。该模块配置指令如下表所示。

设置从指定的本地IP地址及端口号与FastCGI服务器建立连接,指令值可以是变量。当指令值参数为transparent时,

允许将客户端的真实IP透传给FastCGI服务器,并以客户端真实IP为访问FastCGI服务器的源IP,当指令值为off

限制在响应数据未完全读取完毕时忙于向客户端发送响应的缓冲区的大小,以使其余的缓冲区用于读取响应数据。该值必须

大于单个缓冲区或fastcgi_buffer_size的大小,小于总缓冲区大小减掉一个缓冲区的大小

限制从FastCGI服务器读取响应的每个请求的速率,单位是字节/秒,指令值为0表示不限制。该指令只在fastcgi_buffer_ing

当响应数据超出响应数据缓冲区的大小时,超出部分的数据将存储于临时文件中。该指令用于设置临时文件的最大值。该指令值必须大

限制一次写入临时文件的数据大小。默认配置下,其大小通过fastcgi-buffer-size和fastcgi-buffers指令配置进行限制,最

大值是fastcgi_max_temp_file_size指令的值,最小值必须大于单个缓冲区或fastcgi_buffer_size的大小

设置是否在将请求转发给FastCGI服务器之前先从客户端读取整个请求体。当禁用该功能时,如果已经发送请求主体,则无法将请求

设置是否将FastCGI的响应数据在本地持久存储。当指令值为on时,存储路径为root或alias的设置。该指令可以为不经常变更

的FastCGI响应文件创建本地镜像。响应数据先存储到临时文件中,再进行复制或重命名存储

是否启用缓存锁指令。向FastCGI发送请求时,每次只允许一个请求按照fastcgi_cache_key指令设置的标识增添新的缓存数据,

其他相同的请求将等待缓存中出现响应数据或该缓存锁被释放,等待时间由fastcgi_cache_lock_timeout指令设置

定义清除缓存请求条件,若指定的字符串不为空或

0,则将fastcgi_cache_key设置的标识的缓存清除。清除成功则返回状态码204,

定义一个正则表达式,可以将URI正则匹配赋值到$fastcgi_script_name及$fastcgi_path_info两个变量中,可用于获取

CentOS7默认的PHP版本是5.3,可以使用Remi扩展源安装PHP5.6和PHP-FPM。

在Nginx的conf文件夹中创建文件fscgi.conf,用于编辑FastCGI的全局配置,配置内容如下:

Nginx支持后端多个FastCGI服务器的负载均衡,负载均衡有两种方式:一种是通过域名解析多个FastCGI服务器,该方式通过所有域名地址轮询(round-robin)的方式实现负载;另一种是通过配置Nginx的upstream模块实现负载。

本节通过后一种方式实现负载均衡场景的搭建。Nginx的FastCGI模块支持对后端PHP解析数据的缓存,对于动态数据的缓存可以在实际应用场景中提升动态网站的访问速度。

安装PHP-FPM后,如果把PHP代码部署在与Nginx不同的服务器上,需要修改PHP-FPM服务器中的/etc/php-fpm.d/www.conf配置。

我们将服务端程序分为了web服务器和应用程序服务器两个部分。web服务器是用于处理HTML文件,让客户可以通过浏览器进行访问。主流的有Apache、IIS、Nginx、Lghttpd等。而应用服务器处理业务逻辑,比如使用python的django,flask写成的程序。

通常来自客户端浏览器的请求被web服务器截获,如果是静态请求,则如nginx会自己做处理,如果是动态请求,则会抛给后端应用服务器来处理。于是如何在web服务器与应用服务器之间进行通信成了主要问题,这就引出了以下四种处理的接口:CGI、FastCGI、SCGI、WSGI。

CGI是一种通用网关接口规范,该规范详细描述了Web服务器和请求处理程序(脚本解析器)在获取及返回数据过程中传输数据的标准,如HTTP协议的参数名称等。大多数Web程序以脚本形式接收并处理请求,然后返回响应数据,如脚本程序PHP、JSP、Python等。



2.FastCGI(FastCommonGatewayInterface,快速通用网关接口)

FastCGI是CGI的增强版本,其将请求处理程序独立于Web服务器之外,并通过减少系统为创建进程而产生的系统开销,使Web服务器可以处理更多的Web请求。FastCGI与CGI的区别在于,FastCGI不像CGI那样对Web服务器的每个请求均建立一个进程进行请求处理,而是由FastCGI服务进程接收Web服务器的请求后,由自己的进程自行创建线程完成请求处理。



3.SCGI(SimpleCommonGatewayInterface,简单通用网关接口)

SCGI是CGI的替代版本,它与FastCGI类似,同样是将请求处理程序独立于Web服务器之外,但更容易实现,性能比FastCGI要弱一些。

WSGI是为Python语言中定义的Web服务器与Python应用程序或框架间的通用通信接口,可以使Python应用程序或框架与支持这一协议的不同Web服务器进行通信。常见的PythonWeb框架都实现了该协议的封装。

uWSGI是Python实现WSGI、uWSGI(uWSGI独有的协议)、HTTP等协议功能的Web服务器,Nginx通过ngx_http_uwsgi_module模块实现与uWSGI服务器的数据交换并完成Python网站的请求处理。该模块默认编译在Nginx二进制文件中,无须单独编译。该模块的配置指令如下表所示。

设置从指定的本地IP地址及端口号与uWSGI服务器建立连接,指令值可以是变量。当指令值为transparent时,允许将客户端的真实IP透传给uWSGI服务器,

并以客户端真实IP为访问uWSGI服务器的源IP;当指令值为off时,则取消上一层指令域同名指令的配置

限制在响应数据未完全读取完毕时忙于向客户端发送响应的缓冲区的大小,以使其余的缓冲区用于读取响应数据。该值必须大于单个缓冲区或uwsgi_buffer_size的大

限制一次写入临时文件的数据大小。默认配置下,大小通过uwsgi-buffer-size和uwsgi-buffers配置指令进行限制,最大值是uwsgi_max_temp_filesize指令的

设置是否在将请求转发给uWSGI服务器之前先从客户端读取整个请求体。若禁用该功能,如果已经发送请求主体,则无法将请求传递到下一个服务器。对于基于HTTP/1.1

设置是否将uWSGI服务器的响应数据在本地持久存储。当指令值为on时,存储路径为root或alias的设置。该指令可以为不经常变更的uWSGI服务器响应文件创建

是否启用缓存锁指令。向uWSGI服务器发送请求时,每次只允许一个请求按照uwsgi_cache_key指令设置的标识增添新的缓存数据,其他相同的请求将等待缓存中出现响应

数据或该缓存锁被释放,等待时间通过uwsgi_cache_lock_timeout指令设置

CentOS7系统默认安装Python2.7版本,本节搭建的是基于Python3的Django网站,所以需要升级到Python3版本。

Nginx支持伪流媒体播放功能,其可以和客户端的Flash播放器结合,对以.flv、.f4f、.mp4、.m4v、.m4a为扩展名的文件实现流媒体的播放功能。若启用伪流媒体的支持功能,需要按媒体文件格式在配置编译时增加--with-http_f4f_module、--with-http_flv_module和--with-http_mp4_module这3个参数。

伪流媒体配置样例是利用Nginx的自动索引功能生成XML格式的目录列表,通过XSLT生成前端页面,使用jQuery插件video.js的Flash播放器播放FLV及MP4格式的流媒体文件。页面效果如下图所示。

HTTP/2是HTTP协议的2.0版本,该协议通过多路复用、请求优化、HTTP头压缩等功能提升网络传输速度、优化用户体验。HTTP/2使用二进制分帧层将传输的数据分割为更小的数据和帧,并对它们进行二进制格式编码处理,以实现在不改变HTTP现有语义等标准的基础上提升传输性能,从而降低响应延迟、提高请求吞吐的能力。HTTP/2通过多路复用技术使客户端可以并行发送多个请求,以提高带宽的利用率。

HTTP/2是基于SPDY协议设计的,是SPDY的演进版本,但其不强制使用HTTPS协议,仍可支持HTTP明文传输。Nginx是通过ngx_http_v2_module实现HTTP/2协议支持的,编译配置时可通过增加参数--with-http_v2_module启用HTTP2模块。

HTTP2服务器推送可以实现将多个资源文件(CSS、JS、图片等)同时发送到客户端,如下页面中包含style.css和nginx.png两个资源文件。

在没有服务器推送的情况下,客户端通过3个GET方法获取该页面的所有资源。在启用服务器推送后客户端只需通过一个GET方法,就可以获取到该页面的所有资源。配置样例如下:

WebDAV(Web-basedDistributedAuthoringandVersioning)是基于HTTP/1.1的增强协议。该协议使用户可以直接对Web服务器进行文件读写,并支持对文件的版本控制和写文件的加锁及解锁等操作。

Nginx通过ngx_http_dav_module模块实现对WebDAV协议的支持,使用户通过WebDAV模块的配置指令实现文件的管理操作,该模块支持WebDAV协议的PUT、DELETE、MKCOL、COPY和MOVE请求方法,在配置编译参数时,需要添加--with-http_dav_module参数启用该功能。

Nginx的自有模块对WebDAV协议的支持并不完整,可以通过第三方模块nginx-dav-ext-module增加文件特性查找和对写文件的加锁与解锁支持。nginx-dav-ext-module模块的配置指令如下表所示。

进行WebDAV协议的MOVE/COPY操作时,会通过HTTP请求头属性字段Destination指定目标路径,如果客户端请求头中没有字段Destination,Nginx会直接报错。为增加服务端兼容性,可以通过第三方模块headers-more-nginx-module的more_set_input_headers指令在MOVE/COPY操作的HTTP请求头中强制添加Destination字段。

主流操作系统均支持WebDAV协议,用户既可以直接通过添加网络设备的方式添加WebDAV网站目录,也可以使用支持WebDAV协议的客户端进行访问。