配置实例#usernobody;worker_processes1;#工作进程数error_log/etc/nginx/logs/nginx-error.log;error_log/etc/nginx/logs/nginx-error.lognotice;error_log/etc/nginx/logs/nginx-error.loginfo;#pid日志/nginx.pid;事件{worker_connections1024;#一个进程最多可以处理并发请求的上限,number的值不能大于操作系统支持的最大打开文件句柄数accept_mutexon|离开;#解决“惊群”问题。开启后,会对多个Nginx进程接收到的连接进行序列化处理,防止多个进程竞争连接。多接受|离开;#默认为关闭(off),即每个工作进程一次只能接收一个新到达的网络连接使用方法;#选择处理网络消息的事件驱动模型:select,poll,kqueue,epoll,rtsig,/dev/poll,andeventport}http{includemime.类型;indexindex.htmlindex.htmindex.php;default_type应用程序/八位字节流;server_names_hash_bucket_size512;服务器令牌关闭;#隐藏版本信息client_max_body_size400M;log_formatmain'$remote_addr-$remote_user[$time_local]'$status$request"$body_bytes_sent"$http_referer"''"$http_user_agent""$http_x_forwarded_for&quo吨;';access_log/etc/nginx/logs/nginx-access.logmain;发送文件;keepalive_timeout300;#连接的服务器端keepalive时间的默认值为75s。keepalive_requests号码;#Nginx服务器与客户端建立会话连接后,客户端通过该连接发送请求。命令keepalive_requests用于限制用户通过一个连接向Nginx服务器发送请求的次数proxy_max_temp_file_size500M;gzip上;gzip_vary开启;gzip_min_length10240;gzip_comp_level4;gzip_proxied已过期无缓存无存储私有身份验证;gzip_types文本/css纯文本文本/xml文本/javascript应用程序/x-javascript应用程序/xml应用程序/javascript应用程序/json;gzip_disable"MSIE[1-6]\.";服务器{server_namewww.ronux.com;听80;access_log日志/访问。日志主;根/usr/share/nginx/html/www/;索引/index.html;location~*^/community/.+\.(html)${#爬虫的配置,不要去掉if($http_user_agent~*"(googlebot|bingbot|yandex|baiduspider|twitterbot|facebookexternalhit|rogerbot|linkedinbot|embedly|quora链接预览|showyoubot|outbrain|pinterest|slackbot|vkShare|W3C_Validator)"){重写^/(.*)$/render/https://$host$request_uribreak;proxy_passhttp://ronux-rendertron:3000;}索引index.html;try_files$uri$uri//index.html?s=$uri&$args;}位置/{索引index.html;#配置页不缓存html和htm结尾文件if($request_filename~.*\.(htm|html)$){add_headerCache-Controlno-store;}error_page404/404.html;}}include/etc/nginx/conf.d/*.nginx.conf;}位置匹配规则location[=|~|~*|^~]uri{...}uri分为:标准uri和正则uri匹配规则:标准uri匹配请求字符串,如果有多个则取匹配度最高的那个,这个不是结尾。然后使用location块中的常规uri来匹配请求字符串。如果第一次匹配成功,搜索将结束。如果正则uri匹配失败,则返回1中选择的匹配。最高标准uri结束搜索匹配选项:●“=”,用在标准uri之前,要求请求字符串与uri严格匹配。如果匹配成功,将停止搜索并立即处理请求。●“~”表示uri包含正则表达式,区分大小写。●“~*”表示uri包含正则表达式,不区分大小写。●“^~”,用在标准uri之前,要求Nginx服务器找到标识uri与请求字符串匹配度最高的位置,并立即使用该位置处理请求,而不是使用常规uri和位置块中的请求字符串确实匹配。如果uri包含正则表达式,则必须使用“~”或“~*”标识符。locationroot&alias的区别:root:服务器端设置的根目录,用于在index.htmllocation/data/下查找请求的资源匹配/usr/share/nginx/html/data/{root/usr/share/nginx/html;}alias:使用alias命令改变location/data/index.html请求匹配/usr/share/nginx/html/other/index.htmllocation收到的URI的请求路径~^/data/(.+.(htm|htm))${alias/usr/share/nginx/html/other/$1;}常用变量//以https://www.ronux.com/communi...请求为一个例子$request//请求行信息'GET/community/homePage/?from=mainEntranceHTTP/1.1'$uri//这里是默认的文件补全'/community/homePage/index.html'$request_filename//'/Users/xxx/homepage/dist/community/homePage/index.html'$request_method//'GET'网络服务器有几种常见的请求处理机制。多进程:每当服务器接收到客户端时,服务器主进程会生成一个子进程与客户端建立连接。交互直到连接断开,子进程结束。代表人物:apache多线程:每当服务器接收到客户端时,服务器的主进程会产生一个线程与客户端进行交互。操作系统创建线程的开销比创建进程少得多。代表:tomcat、IIS异步IO:主要是指异步非阻塞。即发送方向接收方发送请求后,无需等待响应即可继续其他工作;如果接收方在处理请求时进行的IO操作不能立即得到结果,则不等待,而是立即返回去做其他事情。当IO操作完成后,会通知接收方完成状态和结果,接收方会响应发送方。代表:nginx、nodeNginx事件处理机制Nginx服务器的工作进程调用IO后,就去干其他的工作;当IO调用返回时,它会通知正在工作的进程。这里有一个问题,IO调用如何通知worker进程自己的状态呢?这个问题一般有两种解决方案。一种是让工作进程在其他工作的时候,每隔一段时间检查一下IO的运行状态,如果完成了,就响应客户端,如果没有完成,就继续进行中的工作;第二,IO调用完成后可以主动通知工作进程。对于前者,虽然worker进程在IO调用的过程中没有等待,但是不断的检查还是会造成大量的时间和资源开销。最理想的方案是第二种。具体使用select/poll/epoll/kqueue等系统调用来支持第二种方案。这些系统调用,通常也称为事件驱动模型,提供了一种机制,允许进程同时处理多个并发请求,而无需关心IO调用的具体状态。IO调用完全由事件驱动模型管理,当事件就绪时,通知worker进程事件就绪。select/poll:进程主动轮询epoll:内核轮询并通知进程。Linux2.5.44引入,可在Linux2.6及以上版本使用。epoll库在Linux平台上是高效的。支持一个进程打开大量的事件描述符,上限是系统可以打开的最大文件数;同时,epoll库的IO效率不会随着描述符数量的增加而线性下降,因为它只会对内核报告的“活跃”描述符进行操作。rtsig:实时信号。信号队列长度有限,溢出后poll降级。直到rtsig信号队列完全清空。rtsig模型在Linux2.2.19及更高版本上可用。Nginx进程架构是如何在主进程和worker进程之间通信的?主流程=>工作流程:单向流水线工作流程<==>工作流程:流水线run-loops事件处理循环模型地址重写和地址转发地址重写:重定向其实就是为了实现地址标准化。那么,什么是地址规范化?让我们举个例子。比如访问谷歌主页,我们可以在地址栏输入www.google.com或者google.cn,它们都可以准确指向谷歌主页。从客户端来看,Google主页对应两个Address,实际上是Google服务器在不同的地址中选择某个地址,即www.google.com,然后返回服务器响应。这个过程就是地址标准化的过程。在服务器中把google.cn的地址改成www.google.com的过程就是地址重定向的过程。地址转发:“转发”的概念起初与网页访问无关。是指在网络数据传输过程中,数据包到达路由器或网桥后,设备检查数据包地址,将数据传送到相邻的局域网。在过程中。后来这个概念被用在了网页访问中,出现了“地址转发”这个词。“地址转发”是指将一个域名指向另一个已有站点的过程。正向代理和反向代理正向代理服务器和反向代理服务器的概念很简单。可以概括为:正向代理服务器用于让局域网客户端访问外网访问外网资源。反向代理服务器是用来让外网的客户端访问局域网内的站点来访问站点内的资源
