Nginx最实用的配置技巧是老司机用过的。server{listen80;server_nameops-coffee.cnb.ops-coffee.cn;}server_name后面可以跟多个域名,多个域名之间用空格隔开配置多个站点server{listen80;server_namea.ops-coffee.cn;location/{root/home/project/pa;index.html;}}server{listen80;server_nameops-coffee.cnb.ops-coffee.cn;location/{root/home/project/pb;index.html;}}server{listen80;server_namec.ops-coffee.cn;location/{root/home/project/pc;indexindex.html;}}是基于Nginx虚拟主机配置实现的。Nginx有三种基于IP的虚拟主机:你需要在你的服务器上有多个地址,每个站点对应一个不同的地址。这种方法使用较少。基于端口的虚拟主机:每个站点对应不同的端口。访问时使用ip:port访问。可以修改监听端口使用基于域名的虚拟主机:使用最广泛的方法,上面的例子使用基于域名的虚拟主机,前提是你有多个域名对应每个站点,并填写在不同的域名中为server_name即nginx可以添加账号密码验证server{location/{auth_basic"pleaseinputuser&passwd";auth_basic_user_filekey/auth.key;}}通过nginx接入的服务有很多,但是不提供账号认证功能,可以使用nginx提供的authbase账号密码来实现认证,可以使用以下脚本生成账号密码#catpwd.pl#!/usr/bin/perlusestrict;my$pw=$ARGV[0];printcrypt($pw,$pw)."\n";指示:#perlpwd.plops-coffee.cnopf8BImqCAXww#echo"admin:opf8BImqCAXww">key/auth.keynginx开启列目录当你想让nginx作为文件下载服务器存在时,需要开启nginx列目录server{locationdownload{autoindexon;autoindex_exact_sizeoff;autoindex_localtimeon;}}autoindex_exact_size:开启时(默认),显示文件的准确大小,单位为byte;当它被更改为关闭时,它显示文件的大概大小,以KB或MB或GBautoindex_localtime:当它关闭(默认)时,显示的文件时间是GMT时间;改成on后,显示的文件时间为服务器时间。默认情况下,访问列出的txt等文件时,浏览器会显示文件内容。如果想让浏览器直接下载,添加如下配置{listen80default;}当一个nginx服务上创建多个虚拟主机时,默认会从上到下搜索。如果没有找到虚拟主机,则返回第一个虚拟主机的内容。如果要指定一个默认站点,可以把这个站点的虚拟主机放在配置文件的第一个。虚拟主机所在位置,或者在本站虚拟主机上配置listendefault,不允许通过IP{listen80default;服务器名称_;return404;}可能有一些未注册的域名或者您不想将服务器地址指向您的Server的域名,此时,会对您的网站造成一定的影响。需要禁止IP或未配置的域名访问。我们使用上面提到的默认规则,将默认流量转为404,这个方法比较粗糙,当然你也可以配置所有没有配置的地址,在访问的时候直接301重定向到你的网站,这样也可以给网站带来一定的流量你的网站服务器{rewrite^/(.*)$https://ops-coffee.cn/$1permanent;}直接返回验证文件location=/XDFyle6tNA.txt{default_typetext/plain;return200'd6296a84657eb275c05c31b10924f6ea';}很多时候微信等程序都要求我们把一个txt文件放到项目中来验证项目的归属。我们可以直接按照上面的方式修改nginx,而不用实际给文件放到服务器上nginx配置上游反向代理http{...upstreamtomcats{server192.168.106.176weight=1;server192.168.106.177weight=1;}server{location/ops-coffee/{proxy_passhttp://tomcats;proxy_set_headerHost$host;proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;proxy_set_headerX-Forwarded-Proto$scheme;}}}如果你不这样做请注意,您可能会陷入给proxy_pass添加或不添加栏的陷阱。下面详细说一下proxy_passhttp://tomcats和proxy_passhttp://tomcats/的区别:虽然只有一个/的区别,但是结果确实不一样。可以分为以下两种情况:1、目标地址不包含uri(proxy_passhttp://tomcats)。此时在新的目标url中,匹配的uri部分没有修改,就是这个样子。location/ops-coffee/{proxy_passhttp://192.168.106.135:8181;}http://domain/ops-coffee/-->http://192.168.106.135:8181/ops-coffee/http://domain/ops-coffee/action/abc-->http://192.168.106.135:8181/ops-coffee/action/abc2。目标地址包含uri(proxy_passhttp://tomcats/,/也是uri),此时在新的目标url中,匹配的uri部分会修改为该参数中的uri。location/ops-coffee/{proxy_passhttp://192.168.106.135:8181/;}http://domain/ops-coffee/-->http://192.168.106.135:8181http://domain/ops-coffee/action/abc-->http://192.168.106.135:8181/action/abcnginx上游开启keepaliveupstreamtomcat{serverops-coffee.cn:8080;keepalive1024;}server{location/{proxy_http_version1.1;proxy_set_headerConnection"";proxy_passhttp:///tomcat;}}在项目中大部分情况下会使用nginx作为反向代理,比如nginx后接tomcat,nginx后接php等,此时我们开启nginx与后端服务之间的keepalive,以减少频繁创建TCP连接导致的资源消耗,如上配置keepalive:指定每个nginxworker最多可维持的连接数为1024,默认不设置,即使用nginx时keepalive不生效aclientproxy_http_version1.1:开启keepalive需要HTTP协议版本为HTTP1.1proxy_set_headerConnection"":Inorderr为了兼容老协议,防止http头中Connectionclose导致的keepalive失败,需要及时清除HTTP头中的Connection404,自动跳转到首页服务器{location/{error_page404=@ops-咖啡;}location@ops-coffee{重写.*/permanent;}}网站404页面不是很友好,我们可以通过上面的配置在出现404后自动跳转到首页
