首页 » 网站推广 » seturlphp技巧_安然开拓运维必备的Nginx代理Web做事器机能优化与安然加固设备

seturlphp技巧_安然开拓运维必备的Nginx代理Web做事器机能优化与安然加固设备

访客 2024-11-20 0

扫一扫用手机浏览

文章目录 [+]

本次进行Nginx做事调优加固紧张从以下几个部分:

模块性能优化系统内核优化编译安装优化性能参数优化安全加固配置1.2 目标范围

本文档仅供内部利用,禁止外传,帮助研发职员,运维职员对系统长期稳定的运行供应技能文档参考。

seturlphp技巧_安然开拓运维必备的Nginx代理Web做事器机能优化与安然加固设备

1.3 读者工具项目经理开拓职员测试职员运维职员干系领导2.参考解释#2.1 帮助参考

Nginx是一个高性能的HTTP和反向代理做事器,也是一个IMAP/POP3/SMTP做事器。
Nginx作为负载均衡做事器, Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行做事,也可以支持作为 HTTP代理做事器对外进行做事。

Nginx版本选择:

Mainline version 最新版本,推举测试的业务项目的时候利用Stable version 稳定版本,推举项目上线实际利用Legacy versions 历史版本,不推举选择可能存在薄弱性漏洞

项目构造:

#编译后的nginx项目布局造/etc/nginx/├── client_body_temp #客户端上面的临时文件存放目录├── conf #nginx的配置文件存放目录├── fastcgi_temp #fastcgi的临时文件存放目录├── html #存放静态资源或者脚本文件的地方├── logs #nginx日志文件├── proxy_temp #nginx正向/反向代理缓存文件存放目录├── sbin #nginx可实行文件├── scgi_temp #scgi临时文件目录└── uwsgi_temp #uwsgi临时文件存放目录

Nginx文档帮助: http://nginx.org/en/docs/Nginx首页地址目录: /usr/share/nginx/htmlNginx配置文件:

/etc/nginx/nginx.conf/usr/local/nginx/conf/nginx.conf/usr/local/etc/nginx/nginx.conf

2.2 参数解释

localtion 要求匹配的url实是一个正则表达式:

# 语法规则: location [=|~|~|^~] /uri/ { ... }# 参数解析: = 表示精确匹配,这个优先级也是最高的/ 通用匹配,任何要求都会匹配到,默认匹配.~ 表示区分大小写的正则匹配~ 表示不区分大小写的正则匹配(和上面的唯一差异便是大小写) !~和!~分别为区分大小写不匹配及不区分大小写不匹配的正则!~,!~ : 分别标识为区分大小写不匹配及不区分大小写不匹配的正则^~ 表示 uri 以某个常规字符串开头,理解为匹配 url 路径即可。
nginx 不对 url 做编码,因此要求为/static/20%/aa,可以被规则^~ /static/ /aa 匹配到(把稳是空格)

Nginx 匹配判断表达式:

-f 和 !-f: 用来判断是否存在文件-d 和 !-d: 用来判断是否存在目录-e 和 !-e: 用来判断是否存在文件或目录-x 和 !-x: 用来判断文件是否可实行

例如,匹配末端为如下后缀的静态并判断是否存在该文件, 如不存在则404。

location ~ \.(js|css|jpg|jpeg|gif|png|swf)$ { if (-f $request_filename) { return 403; break; }}

3.3 模块解释

查看可用模块编译参数:http://nginx.org/en/docs/configure.html

#可以通过运行 "./configure --help" 查看编译帮助,决定是否须要安装哪些模块,比如下面的ssi模块能够实现访问shtml页面./configure -help

http_gzip模块开启gzip压缩输出(常常是大于1kb的静态文件),减少网络传输;

gzip_min_length 1k #设置许可压缩的页面最小字节数页面字节数从content-length中进行获取,默认值是20gzip_buffers 4 16k #设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。
4 16k代表以16k为单位,安装原始数据大小以16k为单位的4倍申请内存。
gzip_comp_level 2 #gzip压缩比,其值从1到9数字越大压缩率越高,越花费CPU负载也越高gzip_types #匹配mime类型进行压缩,无论是否指定”text/html”类型总是会被压缩的,推举配置:`gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript。
`gzip_http_version 1.0 #用于识别 http 协议的版本早期的浏览器不支持 Gzip 压缩,用户就会看到乱码,所以为了支持前期版本加上了这个选项;如果你用了 Nginx 的反向代理并期望也启用 Gzip 压缩的话,由于末端通信是 http/1.0,故请设置为 1.0。
gzip_proxied any #Nginx作为反向代理的时候启用,决定开启或者关闭后端做事器返回的结果是否压缩,匹配的条件是后端做事器必须要返回包含”Via”的 header头。
gzip_vary on #和http头有关系会在相应头加个 Vary: Accept-Encoding ,可以让前真个缓存做事器缓存经由gzip压缩的页面,例如用Squid缓存经由Nginx压缩的数据。

http_fastcgi_module模块nginx可以用来要求路由到FastCGI做事器运行运用程序由各种框架和PHP编程措辞等。
可以开启FastCGI的缓存功能以及将静态资源进行剥离,从而提高性能。

指令:fastcgi_temp_path #定义FastCGI缓存文件保存临时路径。
指令:fastcgi_cache_path #定义FastCGI缓存文件保存路径和缓存的其它参数。
缓存数据以二进制数据文件形式存储,缓存文件名和key都是通过对访问URL利用MD5打算得到的结果。
缓存文件先保存至fastcgi_temp_path指定的临时目录下,然后通过重命名操作移至fastcgi_cache_path指定的缓存目录。
建议fastcgi_temp_path和fastcgi_cache_path设为同一分区,同分区移动操作效率更高。
示例:fastcgi_temp_path /tmp/fastcgi_temp;fastcgi_cache_path /tmp/fastcgi_cache levels=1:2 keys_zone=cache_fastcgi:16m inactive=30m max_size=1g;# levels指定了目录构造,子目录数以16为基数;# keys_zone指定了共享内存区名和大小,用于保存缓存key和数据信息;# inactive指定了缓存数据保存的韶光,当这段韶光内未被访问将被移出;# max_size指定了缓存利用的最大磁盘空间,超过容量时将最近最少利用数据删除。
#示例中利用/tmp/fastcgi_temp作为FastCGI缓存的临时目录;/tmp/fastcgi_cache作为FastCGI缓存保存的终极目录;一级子目录为16的一次方16个,二级子目录为16的2次方256个;共享内存区名为cache_fastcgi,占用内存128MB;缓存过期韶光为30分钟;缓存数据保存于磁盘的最大空间大小为1GB。
指令:fastcgi_cache_key # 定义FastCGI缓存关键字。
启用FastCGI缓存必须加上这个配置,不然访问所有PHP的要求都为访问第一个PHP文件URL的结果。
指令:fastcgi_cache_valid # 为指定的Http状态码指定缓存韶光。
指令:fastcgi_cache_min_uses # 指定经由多少次要求相同的URL将被缓存。
指令:fastcgi_cache_use_stale # 指定当连接FastCGI做事器发生缺点时,哪些情形利用过期数据回应。
指令:fastcgi_cache # 缓存利用哪个共享内存区

keepalive模块长连接对性能有很大的影响,通过减少CPU和网络开销须要开启或关闭连接;

keepalive_timeout 闲长连接保持打开状态的韶光;keepalive_requests 单个客户端长连接可以要求的数量;keepalive 上游做事器长连接的干系指令,每个事情进程中空闲长连接到上游做事器保持开启的连接数量(没有默认值)。
要利用连接到上游做事器的长连接,必须要配置文件中下面的指令:

proxy_http_version 1.1; proxy_set_header Connection "";

http_ssl_module模块Nginx开启支持Https协议的SSL模块

#Nginx SSL性能调优ssl_protocols TLSv1 TLSv1.1 TLSv1.2;#把稳这里的加密办法ssl_ciphers ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!AESGCM;ssl_prefer_server_ciphers on;ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;3.做事优化#3.1 系统内核

Linux内核参数部分默认值不适宜高并发,Linux内核调优,紧张涉及到网络和文件系统、内存等的优化,

临时方法可以通过调度/Proc文件系统,须要把稳调度/Proc文件系统系统重启后还原至默认值(不推举)。
永久修正/etc/sysctl.conf配置文件永久保存

下面是我常用的内核调优配置:

grep -q "net.ipv4.tcp_max_tw_buckets" /etc/sysctl.conf || cat >> /etc/sysctl.conf << EOF########################################net.core.rmem_default = 262144net.core.rmem_max = 16777216net.core.wmem_default = 262144net.core.wmem_max = 16777216#缓冲区行列步队设置与连接及其如何排队干系##调节系统同时发起的tcp连接数,在高并发的要求中,默认的值可能会导致链接超时或者重传,因此须要结合并发要求数来调节此值。
#net.core.somaxconn = 262144#在提交到CPU前网卡中数据包缓冲的速率,高带宽下提高这个值可提高性能;检讨内核日志文件中有关这个设置的缺点,根据网卡文档中的建议修正这个值。
net.core.netdev_max_backlog = 262144#设定系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上net.ipv4.tcp_max_orphans = 262144#用于记录那些尚未收到客户端确认信息的连接要求的最大值(根据类才变动)net.ipv4.tcp_max_syn_backlog = 1024#设定timewait的数量默认是180000设为10000。
net.ipv4.tcp_max_tw_buckets = 10000#在高并发情形端口值的起止范围一样平常端口号设置是1024到65000,用来设定许可系统打开的端口范围;net.ipv4.ip_local_port_range = 1024 65500#用于设置启用timewait快速回收net.ipv4.tcp_tw_recycle = 1#用于设置开启重用,许可将TIME-WAIT sockets重新用于新的TCP连接。
net.ipv4.tcp_tw_reuse = 1#用于设置开启SYN Cookies,当涌现SYN等待行列步队溢出时,启用cookies进行处理。
net.ipv4.tcp_syncookies = 1#决定了内核放弃连接之前发送SYN+ACK包的数量。
net.ipv4.tcp_synack_retries = 1#表示在内核放弃建立连接之前发送SYN包的数量。
net.ipv4.tcp_syn_retries = 1#决定了套接字保持在FIN-WAIT-2状态的韶光。
默认值是60秒。
#精确设置这个值非常主要,有时纵然一个负载很小的Web做事器,也会涌现大量的去世套接字而产生内存溢出的风险。
net.ipv4.tcp_fin_timeout = 30#选项表示当keepalive启用的时候,TCP发送keepalive的频度。
默认值是2(单位是小时)。
net.ipv4.tcp_keepalive_time = 600net.ipv4.tcp_keepalive_intvl = 30net.ipv4.tcp_keepalive_probes = 3net.ipv4.tcp_mem = 786432 1048576 1572864#文件描述符系统级别的限定#kernel.sem = 250 32000 100 128fs.file-max = 6815744vm.swappiness = 10fs.aio-max-nr = 1048576EOFsysctl -p

文件描述符文件描述符是操作系统资源,用于表示连接、打开的文件,以及其他信息。
NGINX 每个连接可以利用两个文件描述符。
例如如果NGINX充当代理时,常日一个文件描述符表示客户端连接,另一个连接到代理做事器,如果开启了HTTP 保持连接,这个比例会更低(译注:为什么更低呢)。

对付有大量连接做事的系统,下面的设置可能须要调度一下:

#修正文件描述符办法vim /etc/security/limits.conf - nofile 65536 #用户级别文件描述符限定#然后进行启动文件修正echo "ulimit -Hsn 65536" >> /etc/profile

3.2 编译优化

精简模块:Nginx由于不断添加新的功能,附带的模块也越来越多,建议一样平常常用的做事器软件利用源码编译安装管理;

(1) 减小Nginx编译后的文件大小

编译Nginx时默认以debug模式进行,而在debug模式下会插入很多跟踪和ASSERT之类的信息,编译完成后一个Nginx要有好几兆字节;因此可以在编译之前,修正干系源码,取消debug模式;

# 找到源码目录下 auto/cc/gcc 文件 debugCFLAGS="$CFLAGS -g" #注释掉或删掉这两行,即可取消debug模式。
ls -alh /usr/local/nginx/sbin/nginx-rwxr-xr-x. 1 root root 915K Aug 17 09:49 /usr/local/nginx/sbin/nginx #可以看到体历年夜大减少

(2) 指定GCC编译参数修正GCC编译参数提高编译优化级别稳妥起见采取 -O2 这也是大多数软件编译推举的优化级别。

Nginx源码文件 auto/cc/gcc 搜索 NGX_GCC_OPT默认GCC编译参数为-O,可以直接修正内容为 NGX_GCC_OPT="-O2" 或者在 ./configure配置时添加--with-cc-opt='-O2'选项。

--with-cc-opt='-O3' #编译级别--with-cpu-opt=CPU #为特定的 CPU 编译,有效的值包括:pentium, pentiumpro, pentium3, # pentium4, athlon, opteron, amd64, sparc32, sparc64, ppc64

GCC编译参数优化 [可选项] 统共供应了5级编译优化级别:

-O0:无优化。
-O和-O1:利用能减少目标代码尺寸以及实行韶光并且不会使编译韶光明显增加的优化,在编译大型程序的时候会显著增加编译时内存的利用。
-O2:包含-O1的优化并增加了不须要在目标文件大小和实行速率上进行折衷的优化。
编译器不实行循环展开以及函数内联。
此选项将增加编译韶光和目标文件的实行性能。
-Os:可以算作 -O2.5,专门优化目标文件大小,实行所有的不增加目标文件大小的-O2优化选项,并且实行专门减小目标文件大小的优化选项。
适用于磁盘空间紧张时利用。
但有可能有未知的问题发生,况且目前硬盘容量很大,常用程序无必要利用。
-O3:打开所有 -O2 的优化选项外增加 -finline-functions、-funswitch-loops、-fgcse-after-reload 优化选项。
相对付 -O2 性能并未有较多提高,编译韶光也最长,天生的目标文件也更大更占内存,有时性能不增反而降落,乃至产生不可预知的问题(包括缺点),以是并不被大多数软件安装推举,除非有绝对把握方可利用此优化级别。

常用编译参数:

#编译0:常规编译参数configure arguments: #安装的目录或者路径#--prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock#实行对应模块nginx所保留的临时文件#--http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp #启动的用户和组用户#--user=nginx --group=nginx #模块参数#--with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module#设置额外的参数将被添加到CFLAGS#--with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' #设置附件参数,链接系统库#-with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'#编译1:除多余模块./configure \"--prefix=/App/nginx" \ "--user=nginx" \ "--group=nginx" \"--with-http_stub_status_module" \"--without-http_auth_basic_module" \"--without-http_autoindex_module" \"--without-http_browser_module" \"--without-http_empty_gif_module" \"--without-http_geo_module" \"--without-http_limit_conn_module" \"--without-http_limit_req_module" \"--without-http_map_module" \"--without-http_memcached_module" \"--without-http_proxy_module" \"--without-http_referer_module" \"--without-http_scgi_module" \"--without-http_split_clients_module" \"--without-http_ssi_module" \"--without-http_upstream_ip_hash_module" \"--without-http_upstream_keepalive_module" \"--without-http_upstream_least_conn_module" \"--without-http_userid_module" \"--without-http_uwsgi_module" \"--without-mail_imap_module" \"--without-mail_pop3_module" \"--without-mail_smtp_module" \"--without-poll_module" \"--without-select_module" \"--with-cc-opt='-O2'"

3.3 性能优化

缓存和压缩与限定可以提高性能NGINX的一些额外功能可用于提高Web运用的性能,调优的时候web运用不须要关掉但值得一提,由于它们的影响可能很主要。

1)缓存一个启用NGINX缓存的情景,一组web或者运用做事器负载均衡,可以显著缩短对客户真个相应韶光,同时大幅度降落后端做事器的负载。
缓存本身就可以作个专题来讲,这里我们就不试图讲它了。

# 网页资源缓存location ~ \.(xml|html|htm)$ { # 资源断交对目录设置 root /var/www/html; # 日志文件的相对路径或完全路径 access_log /path/to/file.log; # 开启日志记录 access_log on; # 设置过期韶光 expires 24h;}# 样式、JS、图片资源缓存location ~ \.(css|js|ico|gif|jpg|jpeg|png)$ { root /var/www/html/res; # 禁用404缺点日志 log_not_found off; # 关闭日志 access_log off; # 缓存韶光7天 expires 7d;}# 字体资源缓存location ~ \.(eot|ttf|otf|woff|woff2|svg)$ { root /var/www/html/static; log_not_found off; access_log off; expires max;}2)压缩以是利用更小的网络带宽。
然而只管压缩数据会花费CPU资源,但当须要减少网络带宽利用时这样做非常有效。
须要把稳的是,不能对已压缩的文件再压缩例如JPEG 文件。

# 启用 gzip 压缩gzip on;# 启用gzip压缩的最小文件,小于设置值的文件将不会压缩gzip_min_length 2k;# gzip 压缩级别,1-10,数字越大压缩的越好,也越占用CPU韶光,后面会有详细解释gzip_comp_level 2;# 进行压缩的文件类型,javascript有多种形,个中的值可以在 mime.types 文件中找到。
gzip_types text/plain text/css text/javascript application/javascript application/x-javascript application/xml application/x-httpd-php image/x-icon image/jpeg image/gif image/png image/svg+xml image/avif image/webp font/ttf font/opentype;# 建议在http header中添加Vary: Accept-Encoding支持gzip_vary on;
3)限定防止用户花费太多的资源,避免影响系统性能和用户体验及安全性,以下是干系的指令:

limit_conn and limit_conn_zone # NGINX接管客户连接的数量限定,例如单个IP地址的连接。
设置这些指令可以防止单个用户打开太多的连接,花费超出自己的资源。
limit_req and limit_req_zon #NGINX处理要求的速率限定,与limit_rate有相同的功能。
可以提高安全性,尤其是对登录页面,通过对用户限定要求速率设置一个合理的值,避免太慢的程序覆盖你的运用要求(比如DDoS攻击)。
limit_rate # 传输到客户端相应速率的限定(每个打开多个连接的客户花费更多的带宽)。
设置这个限定防止系统过载,确保所有客户端更均匀的做事质量。
max_conns #上游配置块中做事器指令参数。
在上游做事器组中单个做事器可接管最大并发数量。
利用这个限定防止上游做事器过载。
设置值为0(默认值)表示没有限定。
queue (NGINX Plus - 商业版本供应) # 创建一个行列步队,用来存放在上游做事器中超出他们最大max_cons限定数量的要求。
这个指令可以设置行列步队要求的最大值,还可以选择设置在缺点返回之前最大等待韶光(默认值是60秒)。
如果忽略这个指令,要求不会放入行列步队。

大略示例:

http { # 请根据业务需求配置同一IP地址连接数 limit_conn_zone $binary_remote_addr zone=www_weiyigeek_top:10m; # 请根据业务需求配置同一IP地址要求速率 limit_req_zone $binary_remote_addr zone=blog_weiyigeek_top:10m rate=1r/s; server { # 建议创建黑白名单 allow 内部IP或负载均衡IP; deny 恶意IP; # 限流 location ^~ /download/ { # 表示单个IP连接数不超过 2 个 limit_conn www_weiyigeek_top 2; # 表示单个IP要求速率为1s一个, 许可超过频率限定的要求数不多于5个,最多要求不能超过 burst + rate 数量。
limit_req zone=blog_weiyigeek_top burst=5 nodelay; alias /data/weiyigeek.top/download/; } }}
4)减少磁盘IO减少磁盘IO次数可以帮助我们更好的提升做事器性能,增强做事器的负载能力。

# 关闭不须要记录指定目录或者文件访问日志access_log off;error_log /dev/null# 为日志写入创建缓存区减少IO次数,例如下面当缓存达到128k或者日志刷新韶光为1m时将写入日志文件中(gzip 压缩日志-按需开启)access_log /var/log/nginx/access.log main buffer=128k gzip flush=1m;

3.4 运营优化

1) 永久重定向

如果你的站点须要让http URL跳转到https,则非建议设置永久重定向,而非临时重定向,这可以帮助你站点更好的被收录(SEO)。

例如,配置 http 向 https 跳转 (永久)

# 办法1.Redirect(重定向)- 推举server { listen 80; server_name weiyigeek.top www.weiyigeek.top; return 301 https://$host$request_uri;}# 办法2.ReWrite 重写server { listen 80; server_name weiyigeek.top www.weiyigeek.top; # 判断要求host是否是 www.weiyigeek.top ,如果是 weiyigeek.top 则重写为 www.weiyigeek.top if ($http_host !~ "^www\.weiyigeek\.top$" { rewrite ^(.) https://www.weiyigeek.top$1 permanent; }}

3.5 配置优化

nginx配置文件指令优化一览表

位置

指令

解释

优化

main

worker_processes

事情进程数的选择包括(但不限于)CPU核心的数量、存储数据的硬盘数量及负载模式

设置 auto 或者 `cat /proc/cpuinfo

main

worker_cpu_affinity

Nginx默认未开启CPU绑定,绑定事情进程到对应CPU核心

多核CPU建议设置CPU绑定,绑定样例:worker_processes 4;worker_cpu_affinity 0001 0010 0100 1000;

main

worker_rlimit_nofile

打开文件数限定(默认值1024),受限于系统的用户进程打开文件数限定,未设置则利用系统默认值

修正用户打开文件数限定:echo " - nofile 65536" >> /etc/security/limits.conf修正所有Shell和通过Shell启动的进程打开文件数限定:echo "ulimit -n 65536" >> /etc/profile临时生效(重启后生效): ulimit -n 65536

main

worker_connections

Nginx一个事情进程的最大同时连接数,不仅限于客户端连接,包括了和后端被代理做事器等其他的连接

建议设置成与 worker_rlimit_nofile 值相等

mian

sendfile

在http或server或location环境中包含sendfile指令。
NGINX可以不须要切换到用户态,就把缓存或磁盘上的内容写入套接字而且写的速率非常快,花费更少的CPU周期。
把稳只管利用sendfile()数据拷贝可以绕过用户态但不适用于常规的NGINX处理改变内容的链和过滤器比如gzip

建议设置成 on

main-events

accept_mutex

惊群问题:如果指令值为 on 启用,那么将轮流唤醒一个事情进程吸收处理新的连接,别的事情进程连续保持就寝如果指令值为 off 关闭,那么将唤醒所有事情进程,由系统通过use指令指定的网络IO模型调度决定由哪个事情进程处理,未吸收到连接要求的事情进程连续保持就寝

on开启状态为了稳定参数值;off关闭状态提高性能和吞吐量但是会带来高下文切换增多或者负载升高档等其它资源更多花费的后果(推举)

main-events

use

定义了Nginx设置用于复用客户端线程的轮询方法(也可称多路复用网络IO模型),自然是选择效率更高的优先(默认即可)

use epoll

main

open_file_cache

开启关闭打开文件缓存默认值 off 关闭,强烈建议开启可以避免重新打开同一文件带来的系统开销节省相应韶光

max=数字设置缓存元素的最大数量inactive=韶光设置超时 当缓存溢出时利用LRU(最近最少利用)算法删除缓存中的元素;在这段韶光内缓存元素如果没有被访问将从缓存中删除;open_file_cache max=65536 inactive=60s

main

open_file_cache_valid

设置检讨open_file_cache缓存的元素的韶光间隔

80s

main

open_file_cache_min_uses

设置在由open_file_cache指令的inactive参数配置的超时时间内文件该当被访问的最小次数。
如果访问次数大于即是此值,文件描述符会保留在缓存中,否则从缓存中删除。

1

main

error_log

缺点的访问要求日志记录,当并发很大时Nginx的访问日志和缺点日志的保存肯定会造成对磁盘的大量读写也将影响Nginx的性能

注释即可 或者 缺点日志设置为 error 或者 crit

main-http

access_log

成功的访问要求日志记录, 如必须保存日志,可以按逐日或者每时或者其它韶光段对日志做切割,这也可以减小IO,虽然可能效果不是特殊大,不过由于日志文件尺寸变小了很多,也方便查阅或归档剖析日志

建议开启日志记录级别 main

main-http

gzip

默认开启了gzip压缩功能:增加CPU的处理韶光和负载(默认即可)关闭gzip压缩功能:虽然减少了CPU打算节省了做事器的相应韶光,但网站页面总体相应韶光反而加长了静态文件数据传输韶光增加;

设置 gzip on 即可;(该模块中有附带参数)

main-http

keepalive_timeout

空闲长连接保持打开状态的韶光;复用之前已建立的TCP连接吸收要求、发送回应,减少重新建立TCP连接的资源韶光开销

正数为开启持久连接(常规设置120)而0关闭。
当网站页面内容以静态为主时,开启持久连接;动态网页且不能被转化为静态页面,则关闭持久连接;

main-http

keepalive_requests

单个客户端长连接可以要求的数量但是当利用压力测试工具从一个客户端发送多个要求测试时,这个值设更高些特殊有用

默认值是100

main-http-server-location

expires

浏览器缓存设置HTTP应答中的“Expires”和“Cache-Control”头标。
"Expires"一样平常结合"Last-Modified"利用比较缓存韶光,避免了从做事器再次传送文件内容减小了做事器压力,节省了带宽同时也提高了用户访问速率

-1 表示永久过期不缓存,推举静态文件如js/css等等访问设置 expires 30da;

4.安全配置#

描述:Nginx由于安全配置不得当导致的安全问题,Nginx的默认配置中存在一些安全问题,例如版本号信息透露、未配置利用SSL协议等。
对Nginx进行安全配置可以有效的戒备一些常见安全问题,按照基线标准做好安全配置能够减少安全事宜的发生,担保采取Nginx做事器系统运用安全运行;

Nginx安全配置项:

0.隐蔽nginx做事及其版本

温馨提示: 在修正相应的源代码文件后需重新编译。

#办法1:#vi nginx-1.9.11/src/http/ngx_http_header_filter_module.cstatic char ngx_http_server_string[] = "Server: LTWS" ; #修正处#修正nginx_http_header_filter_module#vi nginx-1.9.11/src/http/ngx_http_special_response.cstatic u_char ngx_http_error_full_tail[] ="<center> NGINX_VER </center>" "<hr><center> http://www.weiyigeek.com</center>" "</body>" "</html>" ;static u_char ngx_http_error_tail[] ="<hr><center>LTWS</center>" "</body>" "</html>" ;#设置相应头版本版本#vim src/core/nginx.h#define NGINX_VERSION "secWaf" #可以改成你要的版本号#define NGINX_VER "1.1" NGINX_VERSION #改成你的做事名称

设置成功后验证:

1.低权限用户运行做事

应配置非root低权限用户来运行nginx做事,设置如下建立Nginx用户组和用户,采取user指令指运行用户

加固方法:

groupadd nginxweb;useradd -M -g nginxweb -s /sbin/nologin nginxweb #nginx.conf 中配置 或者编译 的时候指定#nginx 安装编译参数--user=nginx --group=nginxuser nginxweb

2.配置SSL及其会话复用

我们该当为供应的站点配置Secure Sockets Layer Protocol (SSL协议),配置其是为了数据传输的安全,SSL依赖证书来验证做事器的身份,并为浏览器和做事器之间的通信加密。

server { # 开启 SSL 与 http2 支持 listen 443 ssl http2; listen [::]:443 ssl http2; # 开启 SSL ,如果想http 与 https 公用一个配置则可以将其注释( the "ssl" directive is deprecated ) # ssl on; # 配置证书链与证书密钥 ssl_certificate /etc/nginx/ssl/fullchain.cer; ssl_certificate_key /etc/nginx/ssl/weiyigeek.top.key; # ssl会话复用超时时间以及会话复用缓存大小 ssl_session_timeout 1d; ssl_session_cache shared:MozSSL:10m; # about 40000 sessions ......}

3.限定SSL协议与加密套件

不应利用不屈安SSLv2、SSLv3协议即以下和存在薄弱性的加密套件(ciphers), 我们该当利用较新的TLS协议也该当优于旧的,并利用安全的加密套件。

# 兼容性较为通用的SSL协议与加密算法套件ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE:ECDH:AES:HIGH:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:!NULL:!aNULL:!eNULL:!EXPORT:!PSK:!ADH:!DH:!DES:!MD5:!RC4;# 浏览器客户端自动协商加密套件(为了兼容性)ssl_prefer_server_ciphers on;

4.拦截垃圾信息

HTTP Referrer Spam是垃圾信息发送者用来提高他们正在考试测验推广的网站的互联网搜索引擎排名一种技能,如果他们的垃圾信息链接显示在访问日志中,并且这些日志被搜索引擎扫描,则会对网站排名产生不利影响加固方法:

if ( $http_referer ~ (babes|forsale|girl|jewelry|love|nudit|organic|poker|porn|sex|teen) ){ return 403;}

5.恶意扫描拦截

当恶意攻击者采取扫描器进行扫描时候利用use-agent判断是否是常用的工具扫描以及特定的版本,是则返回缺点或者重定向;

# 封杀各种user-agentif ($http_user_agent ~ "java|python|perl|ruby|curl|bash|echo|uname|base64|decode|md5sum|select|concat|httprequest|httpclient|nmap|scan|nessus|wvs" ) { return 403;}if ($http_user_agent ~ "" ) { return 403;}# 封杀特定的文件扩展名比如.bak以及目录;location ~ \.(bak|swp|save|sh|sql|mdb|svn|git|old)$ { rewrite ^/(.)$ $host permanent;}location /(admin|phpadmin|status){ deny all; }

6.禁用WebDAV

Nginx支持webdav,虽然默认情形下不会编译。
如果利用webdav,则该当在Nginx策略中禁用此规则。
加固方法: dav_methods 应设置为off

7.禁用Nginx状态模块

当访问一个特制的URL时,如"../nginx.status",stub_status模块供应一个简短的Nginx做事器状态择要,大多数情形下不应启用此模块。
加固方法:nginx.conf文件中stub_status不应设置为:on

8.关闭默认缺点页上的Nginx版本号

如果在浏览器中涌现Nginx自动天生的缺点,默认情形下会包含Nginx的版本号,这些信息可以被攻击者用来帮助他们创造做事器的潜在漏洞加固方法: 关闭"Server"相应头中输出的Nginx版本号将server_tokens应设置为:off

server_tokens off

9.设置client_body_timeout超时

client_body_timeout设置要求体(request body)的读超时时间。
仅当在一次readstep中,没有得到要求体,就会设为超时。
超时后Nginx返回HTTP状态码408(Request timed out)。
加固方法:nginx.conf文件中client_body_timeout应设置为:10

10.设置client_header_timeout

client_header_timeout设置等待client发送一个要求头的超时时间(例如:GET / HTTP/1.1)。
仅当在一次read中没有收到要求头,才会设为超时。
超时后Nginx返回HTTP状态码408(Request timed out)。

加固方法:nginx.conf文件中client_header_timeout应设置为:10

11.设置keepalive_timeout超时

keepalive_timeout设置与client的keep-alive连接超时时间。
做事器将会在这个韶光后关闭连接。

加固方法:nginx.conf文件中keepalive_timeout应设置为:55

12.设置send_timeout超时

send_timeout设置客户真个相应超时时间。
这个设置不会用于全体转发器,而是在两次客户端读取操作之间。
如果在这段韶光内,客户端没有读取任何数据,Nginx就会关闭连接。

加固方法:nginx.conf文件中send_timeout应设置为:10

13.Nginx可用的方法应限定为GET, HEAD, POST

GET和POST是Internet上最常用的方法。
Web做事器方法在RFC 2616中定义禁用不须要实现的可用方法。

加固方法:

#nginx.conf文件中应存在if ($request_method !~ ^(GET|HEAD|POST)$ )

14.掌握并发连接limit_zone slimits

limit_zone 配置项限定来自客户真个同时连接数。
通过此模块可以从一个地址限定分配会话的同时连接数量或分外情形。

加固方法:nginx.conf文件中limit_zone应设置为:slimits $binary_remote_addr 5m

# 设定保存各个键(例如$binary_remote_addr)状态的共享内存空间的参数,zone=空间名字:大小大小的打算与变量有关limit_conn_zone $binary_remote_addr zone=ops:10m;

15.掌握并发连接limit_conn slimits

该配置项掌握一个会话同时连接的最大数量,即限定来自单个IP地址的连接数量。

加固方法:nginx.conf 文件中 limit_conn 应设置为: slimits 5

# 表示同一IP同一韶光只许可10个连接limit_conn ops 5;

16.主机防webshell跨目录浏览以及列目录

加固方法:

a.在nginx.conf里把每个虚拟主机站点要求端口给差异开b.为每个站点建一个conf,并进行配置c.修正php-fpm启动脚本d.启动做事#在main-http-server段中设置开启或者关闭(对付须要列目录的则开启,否则默认是关闭的)autoindex off

17.文件名解析漏洞php_info,加入fcgi.conf即可

if ($request_filename ~ (.)\.php) { set $php_url $1;}if (!-e $php_url.php) { return 403;}

18.访问权限掌握nginx

加固方法:

#nginx.conflocation ~ ^/script/ { auth_basic "welcome to weiyigeek.github.io"; auth_basic_user_file /var/www/test/script/.htpasswd;}#建立htpasswd密码进行认证mkdir /var/www/test/scriptperl -e "print crypt('baidu.eud',"n");"nnUygd3RSf3u6echo 'nginx:nnUygd3RSf3u6' > /var/www/test/script/.htpasswd/usr/local/nginx/sbin/nginx -s reload

19.非常状态返回200隐蔽URL

办理办法:

server{ listen 80; server_name weiyigeek.top; index index.html index.htm index.php; root /data/web; error_page 404 =200 /404.jpg;}

20.安全模块的选择

# 安全检测模块选择http_sub_modulehttp_stub_status_modulexss-nginx-modulewith-http_ssl_module

21.记录访问者真实IP

描述后端获取Proxy后的真实Client的IP获取须要安装--with-http_realip_module,然后后端程序采取JAVA(request.getAttribute("X-Real-IP"))进行获取;

set_real_ip_from 100.0.0.0/8;#(这里是已知的代理ip)real_ip_header X-Forwarded-For;real_ip_recursive on;# 代理转发location / { proxy_pass http://weiyigeek.top}proxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;set $Real $http_x_forwarded_for;if ( $Real ~ (\d+)\.(\d+)\.(\d+)\.(\d+),(.) ){ set $Real $1.$2.$3.$4;}proxy_set_header X-Real-IP $remote_addr;#差异$proxy_add_x_forwarded_for #较下面多一个$remote_addr的(只能获取到与做事器本身直连的上层要求ip)$http_x_forwarded_for#日志获取$http_x_real_ip|$remote_addr #条件条件是cdn 那边也设置了X-forward否则获取的是cdn的ip

22.地区访问相应方法

描述: 如果要利用geoip地区选择,我们须要再nginx编译时加入 --with-http_geoip_module 编译参数。

# 例如,访问者IP地址不为中国或者美国的都返回403。
if ( $geoip_country_code !~ ^(CN|US)$ ) { return 403;}

23.资源防盗链设置

描述: 为了防止外部站点引用我们的静态资源,我们须要设置那些域名可以访问我们的静态资源。

# none : "Referer" 来源头部为空的情形# blocked : "Referer" 来源头部不为空# server_names : "Referer"来源头部包含当前的server_names(当前域名)location ~ \.(gif|jpg|png|swf|flv)$ { valid_referers none blocked weiyigeek.top server_names ~\.google\. ~\.baidu\.; #这是可以盗链的域名或IP地址,一样平常情形可以把google,baidu,sogou,soso,bing,feedsky,zhuaxia,photozero等域名放进来 if ($invalid_referer) { #这样设置能够防盗链,不断地302重定向很多次,可能会加严惩事器的包袱,以是不建议这么做,除非有单独的图片做事器支持 return 403; # 或者返回 403 缺点代码 或者 JSON 字符串 # 返回json add_header Content-Type 'application/json; charset=utf-8'; return 200 "{'msg':'valid'}"; # 本地目录重写 rewrite ^/..(gif|jpg|jpeg|png)$ /static/qrcode.jpg last; # 重写远程URL rewrite ^/ https://www.weiyigeek.top/picture/images/details-image-1.jpg; } }

24.常规安全相应头配置

描述: 下面网络了Web做事中常规的安全相应头, 它可以担保不受到某些攻击,建议在指定的 server{} 代码块进行配置。

# HSTS (ngx_http_headers_module is required) 该当只利用 HTTPS 而不是利用 HTTP 通信add_header Strict-Transport-Security "max-age=31536000;includeSubDomains;preload" always;# XXS-Protectionadd_header X-XSS-Protection "1; mode=block";# MIME 仿照探测add_header X-Content-Type-Options nosniff;# Frame 安全掌握add_header X-Frame-Options ALLOW-FROM music.163.com;# Spider Robots 爬取策略限定add_header X-Robots-Tag none;# CORS 跨域设置add_header Access-Control-Allow-Origin '.weiyigeek.top';add_header Access-Control-Allow-Methods 'GET';add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';# CSP# 现在让我们许可自托管 scripts、images、CSS、fonts 和 AJAX,以及 jQuery CDN 托管脚本和 Google Analytics 的内容:Content-Security-Policy: default-src 'none'; script-src 'self' https://code.jquery.com https://www.google-analytics.com; img-src 'self' https://www.google-analytics.com; connect-src 'self'; font-src 'self'; style-src 'self';

25.防止非所属域名解析到做事器

描述: 为了防止某些未备案的域名或者恶意镜像站域名绑定到我们做事器上, 导致做事器被警告关停,将会对业务或者SEO排名以及企业形象造成影响,我们可以通过如下办法进行戒备。

server { listen 80 default_server; server_name 82.156.18.253; # 禁止搜索引擎收录IP add_header X-Robots-Tag 'noindex,noarchive,nosnippet'; location ^~ / { # IP地址访问逼迫301跳转 if ( $host = 82.156.18.253 ){ return 301 https://www.weiyigeek.top/index.html; } # 要求host非指定域名时返回json if ( $host !~ weiyigeek\.top ) { add_header Content-Type 'application/json; charset=utf-8'; return 200 '{"status":"error","Author":"WeiyiGeek","Site":"https://www.weiyigeek.top","Chinese":"大佬, 请不要把你的域名解析到我的做事器上","English":"Friend, Please do not resolve your domain name to my server"}'; # return 301 https://space.bilibili.com/385802642; } }...}

实行结果:

$ curl -I 82.156.18.253HTTP/1.1 301 Moved PermanentlyServer: nginxDate: Mon, 11 Apr 2022 12:15:02 GMTContent-Type: text/htmlContent-Length: 162Connection: keep-aliveLocation: https://www.weiyigeek.top/index.htmlX-Robots-Tag: noindex,noarchive,nosnippet$ curl --insecure -I https://82.156.18.253HTTP/2 301server: nginxdate: Mon, 11 Apr 2022 12:15:24 GMTcontent-type: text/htmlcontent-length: 162location: https://www.weiyigeek.top/index.htmlx-robots-tag: noindex,noarchive,nosnippet$ curl weiyigeek.cn{"status":"error","Author":"WeiyiGeek","Site":"https://www.weiyigeek.top","Chinese":"大佬, 请不要把你的域名解析到我的做事器上","English":"Friend, Please do not resolve your domain name to my server"}

25.限定指定客户端地址访问

描述: 有时你的网站可能只须要被某一IP或者IP段的地址要求访问,那么非白名单中的地址访问将被阻挡访问, 我们可以如下配置;

location / { allow 12.97.167.194; allow 12.33.1.2; allow 12.152.49.4; deny all;}

5.配置解释#

常用nginx配置文件阐明:

#[Main] Nginx启动的用户(建议非root用户)user nginx;#[Main] NGINX事情进程数设置值和CPU核心数同等(优化选项)#采取 grep ^processor /proc/cpuinfo | wc -l 进行查看或者autoworker_processes auto;#[Main] 事情模式与连接数上限即每个事情进程可以处理并发的最大连接数(优化选项)events { #[Main-events] nginx作为反向代理做事器单个进程最大连接数(最大连接数=连接数进程数) #建议与worker_rlimit_nofile同等 worker_connections 65535; #[Main-events] use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; #epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。
use epoll; #[Main-events] 提高性能和吞吐量 accept_mutex off;}#[Main] 高并发参数(通过设置cpu粘性来降落由于多CPU核切换造成的寄存器等现场重修带来的性能损耗)(优化选项)worker_cpu_affinity 0001 0010 0100 1000; #四核的时候#如果是8 cpu 分配如下: worker_cpu_affinity 00000001 00000010 00000100 00001000 0001000000100000 01000000 10000000#[Main] 默认是没有设置,可以限定为操作系统最大的限定65535。
(优化选项)worker_rlimit_nofile 65535#[Main]日志位置和日志级别[ debug | info | notice | warn | error | crit ]#error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;error_log logs/error.log error;#做事进程启动文件pid /var/run/nginx.pid;#当前主配置文件包含其他的nginx模块配置文件include /etc/nginx/conf.d/.conf; #[Main部分] http做事器供应http做事干系的一些配置参数。
例如:是否利用keepalive啊,是否利用gzip进行压缩等。
http { #文件扩展名与文件类型映射表 include mime.types; #默认文件类型 default_type text/html; #相应的编码格式 charset UTF-8; #做事器名字的hash表大小 server_names_hash_bucket_size 128; #缓冲区代理缓冲用户端要求的最大字节数, client_body_buffer_size 128k #上传文件大小限定 client_header_buffer_size 4k; #许可客户端要求的最大单文件字节数。
如果有上传较大文件,请设置它的限定值 client_max_body_size 10m #文件访问缓存设置与系统文件描述符设置同等 open_file_cache max=65536 inactive=60s; open_file_cache_valid 80s; open_file_cache_min_uses 1; large_client_header_buffers 4 64k; #设定要求缓 #nginx日志记录格式 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; #利用缓冲而不是每条日志记录都单独实行写操作,NGINX会缓冲持续串的日志记录利用单个操作把它们一起写到文件中。
access_log logs/access.log main buffer=1024 flush=60s; #关闭server信息头相应 server_tokens off; #[MAIN-http]开启高效文件传输模式,指定nginx是否调用sendfile函数来输出文件,减少用户空间到内核空间的高下文切换(与accept_mutex关联配置) #对付普通运用设为 on,如果用来进行下载等运用磁盘IO重负载运用可设置为off,以平衡磁盘与网络I/O处理速率,降落系统的负载。
#系统调用可以实现从一个文件描述符到另一个文件描述符的数据拷贝,常日实现零拷贝,这能加速TCP数据传输 #当配置环境下有sendfile指令和激活内容更改过滤器的指令时NGINX会自动禁用sendfile。
#(优化选项) sendfile on; #防止网络壅塞,不过要包涵在keepalived参数才有效 tcp_nopush on; tcp_nodelay on; #空闲长连接保持打开状态的韶光(优化选项) #长连接要求大量小文件的时候,可以减少重修连接的开销,但假如有大文件上传120s内没上传完成会导致失落败。
如果设置韶光过长,用户又多,永劫光保持连接会占用大量资源。
keepalive_timeout 120; #用于指定相应客户真个超时时间。
这个超时仅限于两个连接活动之间的韶光,如果超过这个韶光客户端没有任何活动,Nginx将会关闭连接 #send_timeout 180s ###模块http_gzip##### #开启gzip压缩输出,减少网络传输。
gzip on; #最小压缩文件大小(把稳不能小于1k) gzip_min_length 1k; #压缩缓冲区 gzip_buffers 4 64k; #压缩版本(默认1.1,前端如果是squid2.5请利用1.0) gzip_http_version 1.1; #压缩等级 gzip_comp_level 2; ##压缩类型,默认就已经包含text/html, gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; ###模块fastcgi##### #FastCGI干系参数是为了改进网站的性能:减少资源占用,提高访问速率。
# fastcgi_temp_path /tmp/fastcgi_temp; # fastcgi_cache_path /tmp/fastcgi_cache levels=1:2 keys_zone=cache_fastcgi:128m inactive=30m max_size=1g; # fastcgi_cache_key $host$request_uri; #指定的Http状态码指定缓存韶光 # fastcgi_cache_valid 200 302 1h; # fastcgi_cache_valid 301 1d; # fastcgi_cache_valid any 1m; # fastcgi_cache_min_uses 1; # fastcgi_cache_use_stale error timeout http_500 http_503 invalid_header; #指定链接到后端FastCGI的超时时间。
# fastcgi_connect_timeout 300; #向FastCGI传送要求的超时时间,这个值是指已经完成两次握手后向FastCGI传送要求的超时时间。
# fastcgi_send_timeout 300; #指定吸收FastCGI应答的超时时间,这个值是指已经完成两次握手后吸收FastCGI应答的超时时间。
# fastcgi_read_timeout 300; #指定读取FastCGI应答第一部分须要用多大的缓冲区,这个值表示将利用1个64KB的缓冲区读取应答的第一部分(应答头),可以设置为gastcgi_buffers选项指定的缓冲区大小。
# fastcgi_buffer_size 64k; #一个php脚本所产生的页面大小为256KB,那么会分配4个64KB的缓冲区来缓存 # fastcgi_buffers 4 64k; #建议设置为fastcgi_buffer的两倍,繁忙时候的buffer # fastcgi_busy_buffers_size 128k; # fastcgi_temp_file_write_size 128k; #[Main-http]配置虚拟主机设置 #http做事上支持多少虚拟主机。
每个虚拟主机一个对应的server配置项,配置项里面包含该虚拟主机干系的配置 server { #[Main-http-server] ngnix监听端口 listen 80; #做事器名:虚拟主机的域名可以写多个域名,可以通过正则匹配。
server_name localhost; #实现访问http时自动跳转到https return 301 https://$host$request_uri; #access_log logs/host.access.log main; #要求正则匹配的来判断访问路径,默认访问localhost:80 访问的是下面这个路径的网页 location / { #站点根目录你网站文件存放的地方 root html; #定义路径下默认访问的文件名,一样平常随着root放 index index.html index.htm; #开启限定IP连接数的时候须要利用 #limit_zone crawler $binary_remote_addr 10m; #访问掌握模块默认就会安装,而且写法也非常大略,可以分别有多个allow,deny,许可或禁止某个ip或ip段访问, #依次知足任何一个规则就停滞往下匹配 (安全选项) allow 192.168.10.100; allow 172.29.73.0/24; deny all; #认证访问 通过httpd-devel 工具的 htpasswd 来为访问的路径设置登录密码 (安全选项) #比如:htpasswd -c nginx.htpasswd admin 天生了默认利用CRYPT加密的密码文件# auth_basic "Nginx Status" auth_basic_user_file /usr/local/nginx/nginx.passwd #列出目录 autoindex Nginx默认是不许可列出全体目录的得当下载做事器。
(非常不推举) #如需此功能,打开nginx.conf文件,在location,server 或 http段中加入autoindex on; #autoindex on #显示出文件的确切大小单位是bytes。
改为off后显示出文件的大概大小,单位是kB或者MB或者GB #autoindex_exact_size off #默认为off,显示的文件韶光为GMT韶光。
改为on后,显示的文件韶光为文件的做事器韶光 #autoindex_localtime on; } #error_page 404 /404.html; #将做事器缺点页面直接指向静态页面/50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } #代理PHP脚本到Apache上监听127.0.0.1:80 末端以php或者php5结尾的 #location ~ \.(php|php5)?$ { # proxy_pass http://127.0.0.1; #} #将PHP脚本通报到正在监听127.0.0.1:9000的FastCGI做事器 #location ~ .+\.(php|php5)$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_pass unix:/tmp/php.sock; #为了安全推举办法 # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; # fastcgi_cache cache_fastcgi; #} # 如果Apache的文档根目录与nginx的根目录同等,则谢绝访问.htaccess文件 #location ~ /\.ht { # deny all; #} #静态资源正则要求路径匹配 location ~ .+\.(gif|jpg|jpeg|png|bmp|swf|txt|csv|doc|docx|xls|xlsx|ppt|pptx|flv)$ { root e:wwwroot; expires 30d; #缓存有效期30天 access_log off; #访问记录 } #JS和CSS缓存韶光设置 location ~ .+\.(js|css|html|xml)$ { expires 30d;} #访问掌握也可以加入认证 location /nginx-status{ #nginx中的stub_status模块紧张用于查看Nginx的一些状态信息. 本模块默认没有安装须要编译安装。
stub_status on; allow 192.168.1.0/24; allow 127.0.0.1; deny all; } } #### Nginx反向代理 ###### #[Main-http] upstream模块设置反向代理和负载均衡的连接的内部web运用做事IP端口 upstream monitor_server { #seesion记录访问的主机,比如第一次访问该做事器后就记录,之后再访问都是该做事器了-进行了绑定 ip_hash; #内网的运用做事,weigth参数表示权值越高被分配到的几率越大。
#max_fails当有max_fails个要求失落败,就表示后真个做事器不可用,默认为1将其设置为0可以关闭检讨 #fail_timeout 在往后的fail_timeout韶光内nginx不会再把要求发往已检讨出标记为不可用的做事器 server 192.168.0.131:80 weight=9 max_fails=5 fail_timeout=600s; server 192.168.0.132:80 weight=1 max_fails=5 fail_timeout=600s; } #server指令配置项 server { listen 80; #要求相应的域名 server_name blog.weiyigeek.top; location / { ##### 模块http_proxy:##### 反向代理紧张配置 #即反向代理,对应upstream负载均衡器 proxy_pass http://monitor_server; #代理做事器干系信息头设置 proxy_redirect off; #如果是有涉及redirect的做事,一定要加上端口8081,否 则默认tomcat在redirect时候默认找80端口 proxy_set_header Host $host; #转发要求的原IP地址,程序中通过request.getHeader("Proxy-Client-IP")得到ip proxy_set_header X-Real-IP $remote_addr; #真个Web做事器可以通过X-Forwarded-For获取用户真实IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ##nginx跟后端做事器连接超时时间(代理连接超时) #模块http_proxy代理超时设置 proxy_connect_timeout 60s; ##nginx跟后端做事器连接超时时间(代理连接超时) proxy_read_timeout 60s; #后端做事器数据回传韶光(代理发送超时) 间 proxy_send_timeout 30s; #设置代理做事器(nginx)从后端realserver读取并保存用户头信息的缓冲区大小,默认与proxy_buffers大小相同,实在可以将这个指令值设的小一点 proxy_buffer_size 4k #proxy_buffers缓冲区,nginx针对单个连接缓存来自后端realserver的相应,网页均匀在32k以下的 proxy_buffers 4 32k #高负荷下缓冲大小(proxy_buffers2) proxy_busy_buffers_size 64k #当proxy_buffers放不下后端做事器的相应内容时,会将一部分保存到硬盘的临时文件中,这个值用来设置最大临时文件大小,默认1024M #它与proxy_cache没有关系。
大于这个值,将从upstream做事器传回。
设置为0禁用。
proxy_max_temp_file_size 0 #当缓存被代理的做事器相应到临时文件时,限定每次写临时文件的大小。
proxy_temp_path(可以在编译的时候)指定写到哪那个目录。
proxy_temp_file_write_size 64k #把cookie的浸染域更换成我们的域名。
#proxy_cookie_domain google.com.hk www.example.com; #proxy_set_header Host "www.google.com.hk"; #设置反向代理得header要求头 #proxy_redirect http://www.google.com.hk/ ; #重定向 #proxy_redirect http:// https://; #sub_filter www.google.com.hk www.example.com; #把谷歌的域名更换本钱身的,把稳须要安装nginx的sub_filter模块 #反向代理的配置. END } #本地动静分离反向代理配置 #所有jsp的页面均交由tomcat或resin处理 location ~ .(jsp|jspx|do)?$ { 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://127.0.0.1:8080; } #所有静态文件由nginx直接读取不经由tomcat或resin location ~ \.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ { expires 15d; } location ~ \.(js|css)$ { expires 1h; } } # 另一个虚拟主机,稠浊利用IP、名称和基于端口的配置 server { listen 80; listen [::]:80; server_name weiyigeek.top; return 301 https://$host$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name weiyigeek.top; # HSTS (ngx_http_headers_module is required) 该当只利用 HTTPS 而不是利用 HTTP 通信 add_header Strict-Transport-Security "max-age=31536000;includeSubDomains;preload" always; # XXS-Protection add_header X-XSS-Protection "1; mode=block"; # MIME 仿照探测 add_header X-Content-Type-Options nosniff; # Frame 安全掌握 add_header X-Frame-Options ALLOW-FROM music.163.com; # Spider Robots 爬取策略限定 # add_header X-Robots-Tag none; # 不限定 # add_header X-Robots-Tag noindex, noarchive, nosnippet; # 限定 # 开启 SSL ,如果想http 与 https 公用一个配置则可以将其注释( the "ssl" directive is deprecated ) # ssl on; # 配置证书链与证书密钥 ssl_certificate /etc/nginx/ssl/fullchain.cer; ssl_certificate_key /etc/nginx/ssl/weiyigeek.top.key; # ssl会话复用超时时间以及会话复用缓存大小 ssl_session_timeout 1d; ssl_session_cache shared:MozSSL:10m; # about 40000 sessions # 配置双证书时开启否则该当关闭 ssl_session_tickets off; ## OCSP stapling ssl_stapling on; ssl_stapling_verify on; # 利用根 CA 和中间证书验证 OCSP 相应的信赖链 ssl_trusted_certificate /etc/nginx/ssl/ca.cer; # 仅利用ECDH是不用配置ssl_dhparam的否则你该当为它配置上 # curl https://ssl-config.mozilla.org/ffdhe2048.txt > /path/to/dhparam ssl_dhparam /path/to/dhparam; # 兼容性较为通用的SSL协议与加密算法套件 ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE:ECDH:AES:HIGH:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:!NULL:!aNULL:!eNULL:!EXPORT:!PSK:!ADH:!DH:!DES:!MD5:!RC4; # 安全配置: ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE; # 证书常规握手加密算法办法共十八个,ECDHE、DHE、AES开头分别6个 ; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:HIGH:!NULL:!aNULL:!eNULL:!EXPORT:!PSK:!ADH:!DES:!MD5:!RC4; # 为了兼容性推举行事器自动选择要利用的算法套件 ssl_prefer_server_ciphers on; # replace with the IP address of your resolver resolver 223.6.6.6 8.8.8.8 192.168.12.254; }}
6.补充知识#

(1) 阿里巴巴供应的Concat或者Google的PageSpeed模块实现这个合并文件的功能。

Concat源代码网址:https://github.com/alibaba/nginx-http-concat/PageSpeed源代码网址:https://github.com/pagespeed/ngx_pagespeed。

(2) PHP-FPM的优化如果您高负载网站利用PHP-FPM管理FastCGI对付PHP-FPM的优化非常主要

1.增加FastCGI进程数:把PHP FastCGI子进程数调到100或以上,在4G内存的做事器上200就可以建议通过压力测试获取最佳值。
2.增加 PHP-FPM打开文件描述符的限定

# vi /path/to/php-fpm.conf找到“1024”,把1024变动为 4096 或者更高,之后重启 PHP-FPM# /etc/security/limits.conf hard nofile 65536 soft nofile 655363.适当增加max_requests: 标签max_requests指明了每个children最多处理多少个要求后便会被关闭默认的设置是500。

(3) 配置Resin on Linux或者Windows为我们可以打开 resin-3.1.9/bin/httpd.sh 在不影响其他代码的地方加入:-Dhttps.protocols=TLSv1.2, 例如

exec $JAVA_EXE -jar -Dhttps.protocols=TLSv1.2 ${RESIN_HOME}/lib/resin.jar $#exec $JAVA_EXE -jar ${RESIN_HOME}/lib/resin.jar $

原文地址: https://blog.weiyigeek.top/2019/9-2-122.html

标签:

相关文章

phppdo类6技巧_PHP PDO 简单教程

PHP 5.5 版本之前,我们有用于访问 MySQL 数据库的 mysql_ 命令,但由于安全性不敷,它们终极被弃用。mysql_...

网站推广 2024-12-19 阅读0 评论0

php编码上传文件技巧_php的文件上传

这里首先声明一下这一章的内容比较多,比较难,你要抱着和自己去世磕的态度。细微之处不放过,多敲多练是王道。 学习就像爬山,得一步一步...

网站推广 2024-12-19 阅读0 评论0