服务热线
015-700137471
产品展示
Products Classification1.为什么nginx内里有的是浏览器渲染出的页面,有的时候就酿成下载文件?这个一个取决于服务端nginx,一个取决于你浏览器。在Nginx服务端的设置文件目录下,有一个mime.types文件,内容如下types { text/html html htm shtml; text/css css; text/xml xml; image/gif gif; image/jpeg jpeg jpg; application/javascript js; application/atom+xml atom; application/rss+xml rss; text/mathml mml; text/plain txt; text/vnd.sun.j2me.app-descriptor jad; text/vnd.wap.wml wml; text/x-component htc;这里,如text/html花样的字符串就是用来说明数据类型的,/前的是主类型,/之后的是该主类型下的子类型。详细的类型界说在RFC2046中。
Nginx通过服务器端文件的后缀名来判断这个文件属于什么类型,再将该数据类型写入HTTP头部的Content-Type字段中,发送给客户端好比,当我们打开一个页面,看到一个PNG花样的图片的时候,Nginx是这样发送花样信息的:服务器上有test.png这个文件,后缀名是png;凭据mime.types,这个文件的数据类型应该是image/png;将Content-Type的值设置为image/png,然后发送给客户端。我们在Chrome浏览器中可以看到这个文件返回的头部信息,并对应的宣传出来,如果不能识别则设置为下载文件。2.multi_accept on的作用是什么?能不能通用设置?这个数值默认就是on建议接纳默认设置, multi_accept的作用是告诉nginx收到一个新毗连通知后接受尽可能多的毗连,多个worker按串行方式来处置惩罚毗连,也就是一个毗连只有一个worker被叫醒,其他的处于休眠状态设置为off后,多个worker按并行方式来处置惩罚毗连,也就是一个毗连会叫醒所有的worker,直到毗连分配完毕,没有取得毗连的继续休眠。
当你的服务器毗连数不多时,开启这个参数会让负载有一定的降低,可是当服务器的吞吐量很大时,为了效率,可以关闭这个参数。3.同一台机械通过历程socket文件快还是通过localhost:9000这个方式快?相互之间各有什么坑吗?这两个模式纷歧样,一般对于法式联系更为精密的,可以使用历程间共享内存挪用,这样效率更高。Socket方式如果,两个历程是松耦合的,那么用接口挪用模式更佳。
IP:PORT方式当前,我们对于系统设计讲求松耦合,微服务的模式,所以版本通过api接口模式挪用更为广泛应用。4.nginx +tomcat 后台服务响应内容比力大,日志报"an upstream response is buffered to a temporary file"的warn,通常这种情况需要设置网站的 Proxy Buffer相关的参数,但proxy buffer相关的参数,我应该设置多大合理这个buffer缓冲区设置是凭据实际的 Response 巨细来定,假设你是这么设置的:fastcgi_buffers 8 5K; fastcgi_buffer_size 5K;#那么内存的缓存区最大能缓存的巨细是 5K * 8 = 40K,如果Nginx署理的后台页面凌驾这个巨细,那就会泛起这个错误。#因为,频繁的写硬盘会影响性能,所以这个参数还是值得适当的凭据实际情况优化的5.关于try_files,怎么在生产中真正联合缓存,署理用?如下例:server { ... location { try_files /app/cache/ $uri @fallback; index index.html; } ...}我们可以用后台法式将缓存信息生成到$document_root/app/cache/目录下,它将检测,$document_root/app/cache/index.html 和$document_root$uri是否有静态缓存生成的文件存在,如果不存在着内部重定向到@fallback(@表现设置文件中预界说标志点)。
6.nginx在设置https时,如何匹配某个URL地址不做https跳转,如下例:server { listen 80; server_name xuliangwei.com; root /code; location / { #如果url不匹配这个则举行跳转https,匹配则走当地的root查询内容 if ($request_uri !~ '^/bgx/') { return 301 https://$server_name$request_uri; } }}server { .... listen 443; server_name xuliangwei.com; ....}7.使用nginx负载平衡时,如何将后端请求超时的服务器流量平滑的切换到另一台上。如果后台服务毗连超时,Nginx是自己是有机制的,如果泛起一个节点down掉的时候,Nginx会更据你详细负载平衡的设置,将请求转移到其他的节点上,可是,如果后台服务毗连没有down掉,可是返回错误异常码了如:504、502、500,这个时候你需要加一个负载平衡的设置,如下:proxy_next_upstream http_500 | http_502 | http_503 | http_504 |http_404;意思是,当其中一台返回错误码404,500...等错误时,可以分配到下一台服务器法式继续处置惩罚,提高平台会见乐成率。server { listen 80; server_name xuliangwei.com; location / { proxy_pass http://node; proxy_next_upstream error timeout http_500 http_502 http_503 http_504; }}8.如何使用nginx的proxy_next_upstream将nginx错误页面返回json需求是除了404 页面,其他的错误页面都要返回 json,而且在外界看来是正常的,所以说白了就是后端服务器返回了我界说的错误状态码,需要在nginx这里做一个转换,转换到 200,用户看到的是200,其实是将错误的状态码定向至200,然后再次调理到/api。
server { listen 80; server_name www.bgx.com; location / { proxy_intercept_errors on; #反向署理默认不支持自界说错误页面,需要增加该参数 proxy_set_header Host $host; proxy_pass http://www_server3_plools; proxy_set_header X-Forwarded-For $remote_addr; proxy_next_upstream error timeout http_503 non_idempotent; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } #泛起500等错误都返回给用户200状态,并跳转至/api error_page 500 502 503 504 =200 /api; location = /api{ default_type application/json; return 200 '{"retCode":"1001","retMsg":"invoke failed"}'; }9.负载平衡设置,当挂掉一台服务时,不能流通地切换需求:在设置负载平衡时,后端三台web,手动关闭一个web 服务,当轮询到这台关停的时候,总是要卡顿良久?#可以如下这两个参数:proxy_connect_timeout 600; #1分钟 proxy_read_timeout 600; #1分钟10.Nginx如何封掉真实恶意攻击的IP地址server { listen 80; server_name bgx.com; location / { set $allow true; if ($http_x_forwarded_for ~ "106.121.*.*|106.121.71.120|106.121.74.130"){ set $allow false; } if ($allow = false){ return 403; } }}11.设置Nginx,仅允许公司网络地址能会见公司后台/admin,其他网络会见返回403错误。server { listen 80; server_name bgx.com; location ~ ^/admin { set $allow false; if ($http_x_forwarded_for ~ "36.11.10.254|36.11.10.*"){ set $allow true; } if ($allow = false){ return 403; } }}12.Linux系统的65535端口限制是如何来的?在TCP、UDP协议的开头,会划分有16位来存储源端口号和目的端口号,所以端口个数是2^16-1=65535个。
TCP端口数65535的限制,这个是由TCP/IP协议栈中的第四层运输层UDP/TCP协议决议的.在UDP/TCP协议中源端口和目的端口都只有16位,也就是说端口的取值规模为0~65535。13.四层负载平衡与七层负载平衡误区?1.四层负载平衡不受系统套接字限制,可以承载的并发量可以远远凌驾65535,这是因为四层在OSI协议中处于较低的层级,其并非在用户空间,而是在内核空间,是由TCP/IP协议栈处置惩罚的!2.而七层负载平衡是在应用层举行负载平衡,应用层位于OSI协议中的最高层,也就是最靠近用户,其维护毗连数要受到系统套接字的限制,Linux默认最多可以使用的套接字就65535个,这是系统的限制……更重要的是每个客户端请求到达服务器,服务器处置惩罚的时候都是自最下层往上一次拆封数据包的,最上面的应用层需要处置惩罚更多的事情,因此其一定承载的并发量不如四层多!3.但需要注意七层负载平衡可以举行更庞大的控制,好比session会话保持,URL规则控制等,功效比四层更全面!至于四层和七层可以处置惩罚的并发量有多大,这个和硬件密切相关,差别设置的服务器,差异较大,没有准确的量化指标!14.如作甚Nginx设置错误页面?当我们只有单台web服务器时,需要设置错误返回页面,可以使用error_page来指定。
[root@web01 conf.d]# cat code3.conf server { listen 80; server_name code.oldboy.com; location / { root /code; } #如服务器返回如下错误状态码,则举行跳转,跳转至/404.html error_page 404 403 /40x.html; #如服务器返回如下错误状态码,则举行跳转,跳转至/50x.html error_page 500 502 503 504 /50x.html; #精准匹配会见 location = /404.html { root /err; } location = /50x.html { root /err; }}15.如作甚nginx反向署理设置自界说错误页面,包罗proxy、fastcgi#署理的设置[root@www conf.d]# cat proxy.confserver { listen 80; server_name test.bgx.com; location / { proxy_pass http://127.0.0.1:8080; proxy_intercept_errors on; #吸收后端web4xx,5xx错误 error_page 500 502 403 404 = /proxy_error.html; #将后端web抛出的错误定向到指定的页面 } #如果有请求proxy_error.html文件的则指定到对应的目录 location = /proxy_error.html { root /code/proxy; }}#后端web节点设置[root@www conf.d]# cat web.confserver { listen 8080; server_name test.bgx.com; root /code/web; index index.html; error_page 404 /404.html; #如果署理开启proxy_intercept_errors则后端web设置error_page无效}16.Nginx如何克制IP直接会见?当用户通过会见IP或者未知域名会见你的网站的时候,你希望克制显示任何有效内容,可以给他返回500,现在海内许多机房都要求网站主关闭空主机头,防止未存案的域名指向过来造成贫苦。server { listen 80; server_name www.xuliangwei.com # 这里指定自己的域名}server{ listen 80 default_server; # 默认优先返回 server_name _; # 空主机头或IP return 500; # 返回500错误}也可以将流量集中导入自己的网站,只要做以下跳转设置就可以server { listen 80 default_server; return 302 https://www.xuliangwei.com;}17.Nginx在上传文件时泛起413 Request Entity Too Large,怎么办?因为Nginx默认支持上传1MB的文件,所以凌驾1MB则会报错。
#nginx上传文件巨细限制设置语法Syntax: client_max_body_size size;Default: client_max_body_size 1m;Context: http, server, location允许该server能支持上传200m的文件,也可以其设置放入http层,所有server都生效。server {... client_max_body_size 200m;...}18.Nginx指定路径时,root与alias区别在哪?root与alias路径匹配主要区别在于nginx如何解释location后面的uri,这会使两者划分以差别的方式将请求映射到服务器文件上,alias是一个目录别名的界说,root则是最上层目录的界说。root的处置惩罚效果是:root路径+location路径alias的处置惩罚效果是:使用alias路径替换location路径1.root路径设置实例: 用户会见www.xuliangwei.com/image/test.gif,实际上Nginx会上/code/image/目录下找去找test.gif文件server { listen 80; server_name www.xuliangwei.com; location /image/ { root /code; }}2.alias设置实例: 用户会见www.xuliangwei.com/image/test.gif,实际上Nginx会上/code/目录下找去找test.gif文件。server { listen 80; server_name www.xuliangwei.com; location /image/ { alias /code; }}19.为什么通过IP地址会见Nginx,有时候会见的不是我想要的页面呢?在开始处置惩罚一个http请求时,nginx会取出header头中的Host变量,与nginx.conf中每个server的server_name举行匹配,以此决议到底由哪一个server来处置惩罚这个请求。
但nginx如设置多个相同的server_name,会导致server_name泛起优先级会见冲突。1.准备nginx对应的设置文件[root@web02 conf.d]# cat code1.confserver { listen 80; server_name localhost code1.bgx.com; location / { root /code1; index index.html; }}[root@web02 conf.d]# cat code2.confserver { listen 80; server_name localhost code2.bgx.com; location / { root /code2; index index.html; }}[root@web02 conf.d]# cat code3.confserver { listen 80; server_name localhost code3.bgx.com; location / { root /code3; index index.html; }}2.准备站点目录[root@web02 conf.d]# mkdir /code{1..3} -p[root@web02 conf.d]# for i in {1..3};do echo "Code$i" > /code$i/index.html;done[root@web02 conf.d]# cat /code1/index.html Code1[root@web02 conf.d]# cat /code2/index.html Code2[root@web02 conf.d]# cat /code3/index.html Code33.检查语法, 并重新加载Nginx[root@web02 conf.d]# nginx -tnginx: [warn] conflicting server name "localhost" on 0.0.0.0:80, ignorednginx: [warn] conflicting server name "localhost" on 0.0.0.0:80, ignorednginx: the configuration file /etc/nginx/nginx.conf syntax is oknginx: configuration file /etc/nginx/nginx.conf test is successful# 重启Nginx[root@Nginx ~]# systemctl restart nginx4.测试会见效果#1.当用户第一次会见, 由code1.conf返回输出信息[root@Nginx ~]# curl localhostCode 1#2.此时将code1.conf修改为code5.conf后举行重载Nginx[root@Nginx ~]# mv code1.conf code5.conf[root@Nginx ~]# systemctl reload nginx#3.再次会见时, 由code2.conf返回输出信息[root@Nginx ~]# curl localhostCode 25.多ServerName优先级总结, 在开始处置惩罚一个HTTP请求时,Nginx会读取请求头中的host,与每个server中的 server_name 举行匹配,来决议用哪一个 server 标签完成处置惩罚这个请求。
但有可能一个Host与多个server中的server_name都匹配,这个时候就会更具匹配优先级来选择实际处置惩罚的server块。优先级匹配效果如下:1.首先选择所有的字符串完全匹配的server_name。
(完全匹配)2.选择通配符在前面的server_name,如*.bgx.com3.选择通配符在后面的server_name,如bgx.*4.最后选择使用正则表达式匹配的server_name5.如果全部都没有匹配到,那么将选择在listen设置项后加入[default_server]的server块6.如果没写,那么就找到匹配listen端口的第一个Server块的设置文件PS注意:当泛起多个相同的Server_Name情况下,设置文件排序优先使用则会先被挪用,所以生产建议设置相同端口, 差别域名,这样则不会泛起会见冲突。20.Nginx Try_files路径匹配如何使用?nginx的try_file路径匹配,按顺序检查文件是否存在[root@bgx ~]# cat /etc/nginx/conf.d/try_file.confserver { listen 80; server_name try.bgx.com; root /code; location / { try_files $uri /404.html /index.php; }}#1.检查用户请求的uri内容是否存在当地,存在则剖析#2.如果请求的url不存在,则会见对应站点目录中的404.html文件 #3.最后交给index.php处置惩罚 1.演示情况准备[root@Nginx ~]# echo "Try-Page" > /soft/code/index.html[root@Nginx ~]# echo "Tomcat-Page" > /soft/app/apache-tomcat-9.0.7/webapps/ROOT/index.html#启动tomcat[root@Nginx ~]# sh /soft/app/apache-tomcat-9.0.7/bin/startup.sh#检查tomcat端口[root@Nginx ~]# netstat -lntp|grep 8080tcp6 0 0 :::8080 :::* LISTEN 104952/java 2.设置Nginx的tryfiles[root@Nginx ~]# cat /etc/nginx/conf.d/try.conf server { listen 80; server_name try.bgx.com; root /code; index index.html; location / { try_files $uri @java_page; } location @java_page { proxy_pass http://127.0.0.1:8080; }}#重启Nginx[root@Nginx ~]# nginx -s reload3.测试`tryfiles`[root@Nginx ~]# curl http://try.bgx.com/index.htmlTry-Page#将/code/index.html文件移走[root@Nginx ~]# mv /code/{index.html,index.html_bak}#发现由Tomcat吐回了请求[root@Nginx ~]# curl http://try.bgx.com/index.html Tomcat-Page21.使用lvs+keepalived可以直接负载到后端的tomcat,nginx也可以负载到后端的tomcat,lvs是4层负载比nginx七层负载效率要高,为什么网上有许多资料要使用lvs+keepalived来负载nginx呢?直接使用lvs+keepalived负载到后端的tomcat不就可以了吗?首先nginx是一个静态服务器,通常用来处置惩罚静态资源,好比你网页中的html,图片,css等,这些都属于静态资源,但nginx也可以作为反向署理,将你的动态资源请求给你分发到后端的应用服务器(此处就是分发到你的tomcat),由于nginx的高性能,尤其是处置惩罚静态资源的高效性!其实两种方案都可以,一种是nginx+tomcat,这种通常用于中小型站点,第二种是lvs+nginx+tomcat,这种适用于大型站点,因为lvs的并发能力远远大于nginx,所以用在最前端,吸收用户请求,后面的nginx可以用于会话保持两者是差别的应用场景,对于有session保持的场景,LVS是做不到的,因此LVS也替代不了Nginx……但如果你的应用不需要更庞大的7层控制,那LVS的性能会远远大于nginx!22.nginx挂维护页面后,所有用户会见网站都市自动跳转至维护页面。但公司内部IP需要能正常会见网站,不授维护页面滋扰。
1.代码如下[root@web01 conf.d]# cat wh.confserver { listen 80; server_name limit.bgx.com; root /code; #------------------> #1.在server层下设定ip变量值为0 set $ip 0; #2.如果泉源IP是10.0.0.101 102则设定变量为ip变量为1 #注意如果remote_addr无法获取真实客户端IP,请使用$http_x_forwarded_for if ($remote_addr ~* "10.0.0.101|10.0.0.102") { set $ip 1; } #3.如果ip变量为0,则跳转至/code/wh.html这个页面,否则不做任那边理 if ($ip = 0) { rewrite ^(.*)$ /wh.html break; } #------------------->如果想针对某个location举行操作,则将如上设置写入location中即可 location / { index index.html; }}2.效果展示。
本文来源:亚搏手机版app下载-www.com900com.com
地址:安徽省六安市固始县近赛大楼1710号
电话:015-700137471
邮箱:admin@com900com.com
Copyright © 2006-2022 www.com900com.com. 亚搏手机版app下载科技 版权所有 备案号:ICP备43265596号-5