当前位置: 首页 > Linux

服务器部署的Nginx

时间:2023-04-06 21:15:30 Linux

nginx业务场景有哪些优势和特点?使用Nginx.conf#usernobody;#用户权限worker_processesauto;#工作进程数#worker_cpu_affinityauto;#全局错误日志和PID文件error_loglogs/error.log;#日志输出#error_loglogs/error.lognotice;#error_loglogs/error.loginfo;#pidlogs/nginx.pid;events{#epoll是一种多路复用IO(I/OMultiplexing)模式,#usesets用于多路复用客户端线程的轮询方法。如果你使用Linux2.6+,你应该使用epoll。如果你使用*BSD,你应该使用kqueue。使用epoll;#IOCP[window],kqueue[bsd],epoll[linux]#单个后台工作进程最大并发连接数worker_connections1024;#multi_accept告诉nginx在收到新的连接通知后接受尽可能多的连接。多接受;#总并发数是worker_processes和worker_connections的乘积#即max_clients=worker_processes*worker_connections#在反向代理的情况下,max_clients=worker_processes*worker_connections/4为什么#为什么上面的反向代理要除以4,应该是一个经验值#根据以上条件,NginxServer在正常情况下可以处理的最大连接数为:4*8000=32000#worker_connections的值的设置与物理内存的大小有关#因为并发受IO约束,max_clients的值必须小于系统可以打开的最大文件数#系统可以打开的最大文件数与内存大小成正比。一般1GB内存的机器能打开的文件数在10万左右。#我们来看看360M内存VPS能打开的文件句柄数是多少:#$cat/proc/sys/fs/file-max#输出34336#32000<34336,即并发连接总数小于系统可以打开的文件句柄总数,这样操作系统可以在可接受的范围内#所以worker_connections的值需要根据worker_processes进程数和系统最大可打开文件总数适当设置#使并发总数小于操作系统最大可打开文件数#本质是根据宿主机的配置物理CPU和内存#当然,理论总并发数可能与实际有偏差,因为宿主机还有其他工作进程需要消耗系统资源。#ulimit-SHn65535}http{includemime.types;#设置mime类型,类型由mime.type文件定义default_typeapplication/octet-stream;#设置日志格式#log_formatmain'$remote_addr-$remote_user[$time_local]"$request"'#'$status$body_bytes_sent"$http_referer"'#'"$http_user_agent""$http_x_forwarded_for"';#设置nginx是否存储访问日志。关闭这个选项可以让读取磁盘IO操作更快#access_loglogs/access.logmain;#sendfile指令指定nginx是否调用sendfile函数(零拷贝模式)输出文件,#对于普通应用,必须设置为on,#如果用于下载等磁盘IO负载大的应用,可以设置为off,#平衡磁盘和网络I/O的处理速度,减少系统的正常运行时间。#高效的文件传输sendfileon;tcp_nopush上;tcp_nodelayon;#types_hash_max_size影响哈希表的碰撞率。types_hash_max_size越大,消耗的内存越多,但hashkey的碰撞率会降低,检索速度会更快。types_hash_max_size越小,内存消耗越小,但hashkey的碰撞率可能会增加。types_hash_max_size2048;#连接超时#keepalive_timeout0;keepalive_timeout65;gzip上;gzip_disable"MSIE[1-6].";gzip_comp_level6;gzip_min_length1000;如果一个请求小于1000字节,我们最好不要压缩它,因为压缩这么小的数据会减慢处理这个请求的所有进程。gzip_proxied已过期无缓存无存储私有身份验证;gzip_types文本/纯应??用程序/x-javascript文本/xml文本/css应用程序/xml;#Buffers:还有一个很重要的参数就是buffer,如果buffer太小,Nginx会不停的写一些临时文件,会导致磁盘不停地读写。下面我们来了解一下设置buffer的一些相关参数:#client_body_buffer_size:客户端可以请求的单个文件的最大字节数#client_header_buffer_size:用来设置客户端请求的Headerbuffer的大小,大多数情况下为1KB足够。#client_max_body_size:设置客户端可以上传的文件大小,默认为1m#large_client_header_buffers:该命令用于设置客户端请求的Headerbuffer的大小#SetRequestbufferclient_body_buffer_size10K;client_header_buffer_size1k;client_max_body_size8m;large_client_header_buffers21k;map$http_user_agent$outdated{#判断浏览器版本default0;"~MSIE[6-9].[0-9]"1."~0MSIE10"1;}#weight:轮询权重,默认值为1。#down:表示当前服务器暂时不参与负载。#max_fails:允许请求失败的次数,默认为1次。当超过最大次数时,返回proxy_next_upstream模块定义的错误。#fail_timeout:有两层意思。一是在fail_timeout时间内允许max_fails次失败;另一种是在max_fails次失败后,30s内没有请求分配给该服务器。#备份:备份机器。当其他所有非备份机器都发生故障时,会请求备份机器,所以这台机器的压力是最轻的。#max_conns:限制一个后端服务器的同时连接数,默认为0。即无限制。#proxy_next_upstream:该命令属于http_proxy模块,指定后端返回什么样的异常响应#loadbalance#upstreamDataBase{#ip_hash;#每个request根据访问ip的hash结果进行分配,这样每个访问者固定访问一个后端服务器即可解决session问题。#服务器10.xx.xx.xxweight=1max_fails=2fail_timeout=30s;#服务器10.xx.xx.xx;#服务器10.xx.xx.xx;#}服务器{听80;#portnumberserver_namev.fpdiov.com;#域名位置/api{#代理APIproxy_passhttp://api.fpdiov.com:8090;#proxy_set_header主机$host;#proxy_set_headerX-Real-IP$remote_addr;#在web服务器端获取用户真实ip#proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;proxy_redirect关闭;proxy_connect_timeout600;#nginx与后端服务器连接超时(代理连接超时)proxy_read_timeout600;#连接成功后,后端服务器响应时间(代理接收Timeout)proxy_send_timeout600;#后端服务器数据返回时间(代理发送超时)proxy_buffer_size32k;#设置代理服务器(nginx)保存用户头信息的缓冲区大小proxy_buffers432k;#proxy_buffersbuffer,一般网页在32k以下,如果是,设置proxy_busy_buffers_size64k;#高负载下的缓冲区大小(proxy_buffers*2)proxy_temp_file_write_size64k;#设置缓存文件夹的大小,如果大于这个值,就会从u中读取pstreamserver>serverpasskeepalive_requests500;proxy_http_version1.1;proxy_ignore_client_abort开启;}位置^~/{root/mnt/www/fpd-car-manage-frontend;#startrootdirectoryif($outdated=1){rewrite^http://oisbyqrnc.bkt.clouddn.comredirect;#判断浏览器版本跳转}indexindex.html;#默认访问页面try_files$uri$uri//index.html;}}#server{#听80;#监听80端口#server_namelocalhost;#访问域名#charsetkoi8-r;#字符集#access_loglogs/host.access.logmain;#location/{#根html;#索引index.htmlindex.htm;#}#error_page404/404.html;#错误页面#将服务器错误页面重定向到静态页面/50x.html##error_page500502503504/50x.html;#location=/50x.html{#根html;#}#静态文本文件,nginx自己处理#location~^/(images|javascript|js|css|flash|media|static)/{#Expires30天,静态文件更新不多,过期时间可以设置大一些,#If频繁更新,然后可以设置较小#30天后到期;#}#将PHP脚本代理到侦听127.0.0.1:80的Apache##location~\.php${#proxy_passhttp://127.0.0.1;#}#将PHP脚本传递给侦听127.0.0.1:9000的FastCGI服务器##location~\.php${#roothtml;#fastcgi_pass127.0.0.1:9000;#fastcgi_indexindex.php;#fastcgi_paramSCRIPT_FILENAME/scripts$fastcgi_script_name;#包含fastcgi_params;#}#拒绝访问.htaccess文件,如果Apache的文档根#与nginx的根一致##location~/\.ht{#denyall;#}#}#另一个混合使用基于IP、名称和端口的配置的虚拟主机##server{#listen8000;#听某个名字:8080;#server_namesomename别名another.alias;#地点/{#根html;#索引index.htmlindex.htm;#}#}#HTTPSserver##server{#启用https,使用http/2协议,nginx1.9.11启用http/2时会有bug,1.9已经有。已在版本12中修复。#listen443ssl;#server_name本地主机;#ssl开启;#ssl_certificatecert.pem;#证书路径;#ssl_certificate_keycert.key;#私钥路径;#ssl_session_cache共享:SSL:1m;;#ssl_ciphersHIGH:!aNULL:!MD5;#指定套件加密算法#ssl_prefer_server_cipherson;#设置协商加密算法时,优先使用我方服务端的加密套件,而不是客户端浏览器的加密套件#ssl_session_timeout60m;#缓存有效期#ssl_session_cacheshared:SSL:10m;#用于存储SSL会话的缓存类型和大小#location/{#roothtml;#索引index.htmlindex.htm;#}#}}