Nginx的几个常用配置和技巧

摘要:
分为以下两种情况:1.目标地址中不带uri。此时新的目标url中,匹配的uri部分不做修改,原来是什么就是什么。

一个站点配置多个域名

server{
listen80;
server_nameops-coffee.cnb.ops-coffee.cn;
}

server_name后跟多个域名即可,多个域名之间用空格分隔

一个服务配置多个站点

server{
listen80;
server_namea.ops-coffee.cn;
location/{
root/home/project/pa;
indexindex.html;
}
}
server{
listen80;
server_nameops-coffee.cnb.ops-coffee.cn;
location/{
root/home/project/pb;
indexindex.html;
}
}
server{
listen80;
server_namec.ops-coffee.cn;
location/{
root/home/project/pc;
indexindex.html;
}
}

基于Nginx虚拟主机配置实现,Nginx有三种类型的虚拟主机

基于IP的虚拟主机:需要你的服务器上有多个地址,每个站点对应不同的地址,这种方式使用的比较少

基于端口的虚拟主机:每个站点对应不同的端口,访问的时候使用ip:port的方式访问,可以修改listen的端口来使用

基于域名的虚拟主机:使用最广的方式,上边例子中就是用了基于域名的虚拟主机,前提条件是你有多个域名分别对应每个站点,server_name填写不同的域名即可

nginx添加账号密码验证

server{
location/{
auth_basic"pleaseinputuser&passwd";
auth_basic_user_filekey/auth.key;
}
}

有很多服务通过nginx访问,但本身没有提供账号认证的功能,就可以通过nginx提供的authbase账号密码认证来实现,可以用以下脚本来生成账号的密码

#catpwd.pl
#!/usr/bin/perl
usestrict;
my$pw=$ARGV[0];
printcrypt($pw,$pw)." ";

使用方法:

#perlpwd.plops-coffee.cn
opf8BImqCAXww
#echo"admin:opf8BImqCAXww">key/auth.key

nginx开启列目录

当你想让nginx作为文件下载服务器存在时,需要开启nginx列目录

server{
locationdownload{
autoindexon;
autoindex_exact_sizeoff;
autoindex_localtimeon;
}
}

autoindex_exact_size:为on(默认)时显示文件的确切大小,单位是byte;改为off显示文件大概大小,单位KB或MB或GB

autoindex_localtime:为off(默认)时显示的文件时间为GMT时间;改为on后,显示的文件时间为服务器时间

默认当访问列出的txt等文件时会在浏览器上显示文件的内容,如果你想让浏览器直接下载,加上下边的配置

if($request_filename~*^.*?.(txt|pdf|jpg|png)$){
add_headerContent-Disposition'attachment';
}

配置默认站点

server{
listen80default;
}

当一个nginx服务上创建了多个虚拟主机时默认会从上到下查找,如果匹配不到虚拟主机则会返回第一个虚拟主机的内容,如果你想指定一个默认站点时,可以将这个站点的虚拟主机放在配置文件中第一个虚拟主机的位置,或者在这个站点的虚拟主机上配置listen default

不允许通过IP访问

server{
listen80default;
server_name_;
return404;
}

可能有一些未备案的域名或者你不希望的域名将服务器地址指向了你的服务器,这时候就会对你的站点造成一定的影响,需要禁止IP或未配置的域名访问,我们利用上边所说的default规则,将默认流量都转到404去

上边这个方法比较粗暴,当然你也可以配置下所有未配置的地址访问时直接301重定向到你的网站去,也能为你的网站带来一定的流量

server{
rewrite^/(.*)$https://ops-coffee.cn/$1permanent;
}

直接返回验证文件

location=/XDFyle6tNA.txt{
default_typetext/plain;
return200'd6296a84657eb275c05c31b10924f6ea';
}

很多时候微信等程序都需要我们放一个txt的文件到项目里以验证项目归属,我们可以直接通过上边这种方式修改nginx即可,无需真正的把文件给放到服务器上

nginx配置upstream反向代理

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_pass http://tomcatsproxy_pass http://tomcats/的区别:

虽然只是一个/的区别但结果确千差万别。分为以下两种情况:

1. 目标地址中不带uri(proxy_pass http://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/abc

2. 目标地址中带uri(proxy_pass http://tomcats/,/也是uri),此时新的目标url中,匹配的uri部分将会被修改为该参数中的uri。

location/ops-coffee/{
proxy_passhttp://192.168.106.135:8181/;
}
http://domain/ops-coffee/-->http://192.168.106.135:8181
http://domain/ops-coffee/action/abc-->http://192.168.106.135:8181/action/abc

nginx upstream开启keepalive

upstreamtomcat{
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作为client时keepalive未生效

proxy_http_version 1.1:开启keepalive要求HTTP协议版本为HTTP 1.1

proxy_set_header Connection "":为了兼容老的协议以及防止http头中有Connection close导致的keepalive失效,这里需要及时清掉HTTP头部的Connection

404自动跳转到首页

server{
location/{
error_page404=@ops-coffee;
}
location@ops-coffee{
rewrite.*/permanent;
}
}

网站出现404页面不是特别友好,我们可以通过上边的配置在出现404之后给自动跳转到首页去

免责声明:文章转载自《Nginx的几个常用配置和技巧》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JavaScript 值删除对象(Object)的属性——delete[电脑配置]屏幕扩展过,找不到界面下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

解读nginx配置

nginx配置指令   main配置段常见的配置指令   分类:     正常运行必备的配置     优化性能相关的配置     用于调试及定位问题相关的配置     事件驱动相关的配置   正常运行必备的配置    1、user     Syntax:user user [group]:运行nginx所使用的用户     Default:user n...

Windows Server 2012 AD域管理创建

前言 关于AD域管理及其权限划分概论:   1. AD域源于微软,适用于windows,为企业集中化管理和信息安全提供强力保障。   2. 提供域中文件夹共享,但同时又对不同用户有不用的权限。   3.通过对设备限制USB接口,网络访问特定网站来实现对企业内部信息的保护和防止流失。   4.个人文件夹可以重定向到服务器文件夹上,实现真正的在同一个域中使用者...

NGINX+TOMCAT实现反向代理

环境说明 NGINX: 192.168.10.10 TOMCAT: 192.168.10.11 NGINX部分 [root@nginx ~]# wget http://nginx.org/download/nginx-1.12.1.tar.gz [root@nginx ~]# tar axvf nginx-1.12.1.tar.gz [root@n...

Yapi数据迁移(docker版)

前言 最近腾讯99一年的特价服务器要到期了,搭建在服务器上的yapi还在使用。本想直接把项目的接口全部导出来,再导入到新的服务器上。但想了下,账号这些的还要他们重新去建,接口地址也要重新配置,本人一直比较赖,思来想去还是无缝迁移吧,大家都省事。 方案 A为老机器,B为新机器。 1.将A服务器(老服务器)上的docker中的MongoDB数据备份; 2.将备...

nginx缓存静态资源,只需几个配置提升10倍页面加载速度

nginx缓存静态资源,只需几个配置提升10倍页面加载速度 首先我们看图说话 这是在没有缓存的情况下,这个页面发送了很多静态资源的请求: 1.png 可以看到,静态资源占用了整个页面加载用时的90%以上,而且这个静态资源还是已经在我使用了nginx配置压缩以后的大小,如果没有对这些静态资源压缩的话,那么静态资源加载应该会占用这个页面展示99%以上的时...

nginx的反向代理缓存

假设有两台物理机,他们分属于不同的域名,以webgame的游戏运营商和开发商为例,运营商需要获取游戏中的排行数据,开发商为了过多对游戏服务器的请求,会在发起请求的机器上设置缓存(或是让运营商定时过来抓取一次数据) nginx设置web缓存,需要用到的相关指令: 1、proxy_cache 2、proxy_cache_path 3、proxy_cache_v...