一、Nginx是什么
Nginx是一款性能卓越的HTTP服务器及反向代理服务器,它是由俄罗斯籍的Igor(即伊戈尔·赛索耶夫)所设计,专为俄罗斯的.ru网站打造。该服务器在.ru网站上稳定运行了四年之久,并且在我国,超过20%的虚拟主机平台都选择了Nginx作为其反向代理服务器。
在我国,众多知名网站均采用nginx作为其网站服务器,包括百度、京东、金山爱词霸、新浪、校内网、淘宝、YUPOO相册、豆瓣、迅雷看看、网易以及腾讯等。
Nginx应用领域解析:涵盖静态网页服务、反向代理服务、正向代理服务以及负载均衡功能,相关视频教程可点击「链接」观看。
二、Nginx的优点
三、Nginx的缺点
四、正向代理
正向代理类似一个跳板机,代理访问外部资源。

举个例子:
我是位用户,遇到了无法访问某网站的困境,然而,我能够接入一个代理服务器。这个代理服务器具备访问那无法触及网站的能力。因此,我首先与代理服务器建立了连接,并向其说明了所需获取的无法访问网站内容。随后,代理服务器完成了内容的获取,并将其返还给了我。从网站立场来看,仅当代理服务器访问内容时留下一次记录,而有时却无法识别出是用户发起的请求,用户的个人信息也可能被隐藏,这一切均取决于代理服务器是否向网站透露相关信息。
用户端需配置正向代理服务器,而这需要先获取到正向代理的IP地址信息,同时也要明确代理软件所使用的端口号。
总结来说:
正向代理充当着客户端与原始服务器之间的桥梁,它负责从原始服务器获取内容。当客户端需要内容时,它会向代理发送一个请求,并明确指出目标服务器(即原始服务器)。随后,代理将这个请求转发给原始服务器,并将获取到的内容反馈给客户端。为了能够使用正向代理,客户端需要进行一些特定的配置。
正向代理的用途:
五、反向代理
就反向代理而言,客户端对其存在毫无察觉,对外界而言,反向代理显得完全透明,访问者并未意识到他们所访问的实际上是一个代理。这主要是因为客户端无需进行任何设置即可实现访问。
反向代理的实际运作机制是,通过代理服务器接收外部发来的连接请求,并将这些请求转递至内部网络中的服务器处理,随后再将服务器处理得到的数据反馈给发起连接的客户端。在这个过程中,代理服务器在对外界看来,充当了一个独立服务器的角色。
反向代理的作用:


二者的区别:
C/C++ Linux服务器高级架构师的学习资料电子书,可点击获取,其中涵盖Linux系统、Nginx、MySQL、Redis、线程池、ZK、Linux内核、CDN、P2P、epoll、TCP/IP、协程、DPDK等多个知识点。点击视频学习链接,进入C/C++Linux服务器开发与后台架构师课程,由零声教育提供,可在腾讯课堂观看学习视频教程。
六、负载均衡及反向代理配置
负载均衡
反向代理
七、性能优化
一般来说nginx配置文件中对优化比较有作用的为以下几项:
1、 8
nginx进程数,建议按照cpu数目来指定,一般为它的倍数
2、 00 00 00000
对各个进程进行CPU资源分配,例如在上一个例子中,将八个进程分别指派至八个独立的CPU。当然,这种分配方式既可以是多个进程对应多个CPU,也可以是单个进程对应多个CPU。
3、
该指令设定了nginx进程所能开启的最大文件描述符数量,其理想数值应为最大可打开文件数(即参数-n所指定的值)除以nginx进程的总数。然而,nginx在分配请求时并不均匀,因此建议将此值与参数-n的数值保持一致。
4、use epoll
使用epoll的I/O模型,用这个模型来高效处理异步事件
5、
每个进程所能承载的最大连接数量,从理论上讲,单台nginx服务器的最大连接数应为:*
6、 60
HTTP连接的超时时长设定为60秒,其作用是确保客户端与服务器之间的连接在指定时间内保持活跃。此功能可防止在后续对服务器的请求中,频繁地建立或重建连接。然而,务必注意,此参数不宜设置得过高!若设置过大,将导致大量无效的HTTP连接占用nginx的连接资源,最终可能引发nginx崩溃!
7、_size 4k
客户端在请求时需要指定头部缓冲区的容量,这一数值可依据您系统的分页尺寸来调整。通常情况下,单个请求的头部容量不会超过1千字节。然而,鉴于多数系统的分页尺寸通常超过1千字节,因此在此处将缓冲区大小设定为分页尺寸。您可以通过执行特定命令来获取分页尺寸的信息。
8、 max= =20s
指定缓存以供文件打开使用,此项功能默认状态下是关闭的;通过“max”参数设定缓存的最大容量,通常建议将其值与打开的文件数量保持一致;此外,还需设定一个时间阈值,即文件自上次被请求以来,经过多长时间后缓存将被自动清除。
9、d 30s
这个是指多长时间检查一次缓存的有效信息
10、uses 1
在指定的时间范围内,文件被调用的最低频率需达到一定数值,若该数值被突破,文件描述符将持续保留在缓存状态中;以示例为准,若某文件在此时间段内未被任何操作,则该文件将被自动清除。
11、 off
隐藏响应头中的操作系统及Nginx版本信息,此举对提升安全性大有裨益。
下面是一个简单的nginx配置文件:
user www www;
worker_processes 8;
设定工作者的CPU亲和性为:00000001,00000010,00000100,00001000,00010000,00100000,01000000;
错误日志位于 /www/log/nginx_error.log 文件中,记录级别设置为严重。
PID文件位于/usr/local/nginx目录下,其文件名为nginx.pid。
worker_rlimit_nofile 204800;
events
{
use epoll;
worker_connections 204800;
}
http
{
include mime.types;
默认类型为应用数据流,具体标识为application/octet-stream。
charset utf-8;
服务器名称哈希桶大小设定为128。
client_header_buffer_size 2k;
限制大型客户端头部缓冲区数量为4,每个缓冲区大小为4千字节。
client_max_body_size 8m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
设置fastcgi缓存路径为/usr/local/nginx/fastcgi_cache,并配置缓存层级为1级和2级。
keys_zone=TEST:10m
inactive=5m;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 16k;
fastcgi_buffers 16 16k;
设置fastcgi繁忙缓冲区大小为16k。
限制fastcgi临时文件写入大小为16千字节。
fastcgi_cache TEST;
限制对状态码200和302的缓存,有效期设为1小时。
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid any 1m;
fastcgi_cache_min_uses 1;
当遇到fastcgi_cache_use_stale时,若出现error、timeout、invalid_header或http_500等情况,则应禁止使用缓存。
设置文件缓存上限为204800,非活跃文件存活时间为20秒。
open_file_cache_min_uses 1;
open_file_cache_valid 30s;
tcp_nodelay on;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip支持的文件类型包括:纯文本格式、JavaScript应用、CSS样式表以及XML文件。
gzip_vary on;
server
{
listen 8080;
服务器名称为backup.aiju.com,不得进行修改。
index index.php index.htm;
root /www/html/;
location /status
{
stub_status on;
}
location ~ .*\.(php|php5)?$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}
限制访问以下文件类型:GIF、JPG、JPEG、PNG、BMP、SWF、JS、CSS。
{
expires 30d;
}
日志格式设置为:访问记录,记录远程地址、用户、本地时间、请求内容等信息。
禁止对状态值和发送的字节数进行修改,同时记录下引用来源的URL。
禁止使用该字段,即"http_user_agent"与"http_x_forwarded_for"。
限制访问记录 至 /www/log/access.log 目录,仅允许执行访问操作。
}
}
关于内核参数的优化(在/etc/.conf文件内):
1、
net.ipv4. = 6000
数量上,默认为。(Deven:因此,若需降低数值,则需相应减小该值)
2、
net.ipv4. = 1024 65000
允许系统打开的端口范围
3、net.ipv4. = 0
开启TIME-WAIT状态下的快速回收机制;此功能旨在迅速降低处于TIME-WAIT状态的TCP连接数量。其中,1代表开启,0代表关闭。然而,需特别注意:此选项通常不建议启用,尤其是在NAT网络环境中,它可能会引发众多TCP连接建立错误,进而导致网站访问出现问题。
严禁对特定内容进行修改,确保专有名词的准确无误,同时避免任何形式的篡改。
实际上,只有当net.ipv4.的相关功能被激活,即通过开启net.ipv4.(通常情况下,该功能在系统默认设置中是开启的)这一特定开关,才能产生实际效果。
一旦激活(与此同时,快速回收功能一并启动),对于NAT设备之后的所有设备而言,无疑是一场灾难!
NAT设备之后,连接的稳定性受到影响,部分设备能够成功连接,而另一些则无法建立连接。
这个功能是专门针对内部网络环境,即网络环境由自身掌控,没有NAT问题的情况而设计的;因此,在公网环境中并不适宜使用。
一般来说,回收状态的产生往往是由于“无法主动连接至远程”,这可能是由于端口不可用,而不是因为需要回收内存(这并无必要)。
即:需求是的需求,会有“端口不够用”的问题吗?
除非是前端机,需要大量的连接后端服务,也就是充当着的角色。
正确的解决这个总是办法应该是:
net.ipv4. 的值设定为9000和6553,这一范围相对较小,是默认的配置。
net.ipv4. 的值设定为10000,这个数值相对较低,根据需要可以进一步适当减小。
net.ipv4. = 1
net.ipv4. = 10
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
4、net.ipv4. = 1
启用重用机制,使得处于TIME-WAIT状态的连接得以被再次利用于新的TCP会话。此功能的安全性较高,通常情况下无需进行修改。
5、net.ipv4. = 1
开启SYN ,当出现SYN等待队列溢出时,启用来处理
6、net.core. =
在Web应用中,函数的默认设置将内核参数net.core限制为128,但nginx的默认值却是511,因此,调整这一数值显得尤为必要。
7、
=
当网络接口接收数据包的速度超过内核处理这些数据包的速度时,所允许进入队列的最大数据包数量。
8、net.ipv4. =
系统内存在多少TCP套接字未与任何用户文件句柄建立关联。一旦该数量超出既定限制,系统将立即终止孤儿连接并显示警告提示。此限制旨在抵御简单的拒绝服务攻击,但不应过度依赖或人为降低该数值,相反,在内存资源增加的情况下,更应考虑适当提升该限制值。
9、
net.ipv4. =
记录的、尚未获得客户确认的连接请求数量上限。以拥有128兆内存的系统为例,其默认上限为1024,而对于内存较小的系统,这一数值通常设定为128。
10、net.ipv4. = 1
时间戳功能能有效防止序列号出现循环。在一条1Gbps的传输链路上,很可能会遭遇之前已使用过的序列号。借助时间戳,内核能够识别并处理这类“非预期”的数据包。在这种情况下,需要将其相关功能关闭。
11、
net.ipv4. = 1
为了建立与对端之间的连接,系统内核必须发出一个SYN信号,并且附加一个用于确认先前SYN信号的ACK。这即是所谓的三次握手过程中的第二次握手环节。该配置决定了内核在终止连接前所发送的包含SYN和ACK的包的数量。
12、net.ipv4. = 1
在内核放弃建立连接之前发送SYN包的数量
13、net.ipv4. = 30
若本端发起套接字关闭请求,该参数设定了套接字维持FIN-WAIT-2状态的时间长度。在对方可能发生错误而持续不关闭连接,甚至出现意外断电的情况下,这一时间长度将发挥作用。其默认值为60秒。2.2 核心值通常设定为180秒,您可以根据这一设置进行调整,但需留意,即便您的设备是负载较轻的WEB服务器,也可能因众多死套接字导致内存溢出。相较于FIN-WAIT-1,FIN-WAIT-2的风险较低,因为它最多只会消耗1.5K的内存,不过,其存活时间相对较长。
14、
net.ipv4. = 30
当起用的时候,TCP发送消息的频度。缺省是2小时
下面贴出一个常用的内核参数的标准配置:
1 net.ipv4.ip_forward = 0
确保默认网络配置中的IPv4过滤策略被设置为1。
确保默认配置下,IPv4协议的接受源路由功能被关闭。
4 kernel.sysrq = 0
5 kernel.core_uses_pid = 1
6 net.ipv4.tcp_syncookies = 1
7 kernel.msgmnb = 65536
8 kernel.msgmax = 65536
9 kernel.shmmax = 68719476736
10 kernel.shmall = 4294967296
系统设置中,针对IPv4协议的TCP最大时间等待连接数上限被设定为6000个。
12 net.ipv4.tcp_sack = 1
确保IPv4的TCP窗口缩放功能被激活,设置为1。
确保配置项net.ipv4.tcp_rmem的值分别为4096、87380和4194304。
设置网络参数net.ipv4.tcp_wmem的值分别为4096、16384和4194304。
确保网络核心的默认内存设置为8388608字节。
网络核心模块的默认接收缓冲区大小设置为8388608字节。
网络核心参数中最大接收内存设置为16777216字节。
确保 net.core.wmem_max 的值设定为 16777216。
内核网络设备最大连接队列设置为262144个。
网络核心参数somaxconn被设置为262144。
系统配置文件中规定,网络协议IPv4下的TCP最大孤儿连接数被设定为3276800。
系统配置中,对于TCP协议的最大同步连接队列长度设定为262144。
确保系统配置中关闭了TCP时间戳功能,设置net.ipv4.tcp_timestamps的值为0。
系统配置中,对于TCP连接的同步确认重试次数设定为1次。
系统配置中,设置IPv4的TCP连接同步重试次数为1次。
确保系统配置中,对于IPv4协议下的TCP连接,启用时间戳回收功能,参数设置为1。
28 net.ipv4.tcp_tw_reuse = 1
29、设置IPv4的TCP内存参数分别为:94500000、915000000和927000000。
确保配置项net.ipv4.tcp_fin_timeout的值为1,以限制TCP连接的终止超时时间。
确保网络配置中,针对TCP连接的存活时间设定为30秒。
网络配置中,设置IPv4的本地端口范围起始值为1024,终止值为65000。
系统配置中,设定了IPv4连接跟踪的最大值,具体数值为6553500。
扫一扫在手机端查看
-
Tags : Nginx Apache Linux C语言 Tomcat MySQL OS X Docker 金山软件 Solaris 操作系统 Windows 俄罗斯 IBM AIX Google Redis 设计 腾讯 Mac电脑 MongoDB 豆瓣网 Origin FreeBSD 人人网
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。


客服1