Nginx的几个常用配置和技巧

一个站点配置多个域名

1server { 2    listen       80; 3    server_name  ops-coffee.cn b.ops-coffee.cn; 4}

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

一个服务配置多个站点

1server { 2    listen       80; 3    server_name  a.ops-coffee.cn; 4 5    location / { 6        root /home/project/pa; 7        index index.html; 8    } 9} 10 11server { 12    listen       80; 13    server_name  ops-coffee.cn b.ops-coffee.cn; 14 15    location / { 16        root /home/project/pb; 17        index index.html; 18    } 19} 20 21server { 22    listen       80; 23    server_name  c.ops-coffee.cn; 24 25    location / { 26        root /home/project/pc; 27        index index.html; 28    } 29}

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

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

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

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

nginx添加账号密码验证

1server { 2    location / { 3        auth_basic "please input user&passwd"; 4        auth_basic_user_file key/auth.key; 5    } 6}

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

1# cat pwd.pl  2#!/usr/bin/perl 3use strict; 4 5my $pw=$ARGV[0] ; 6print crypt($pw,$pw)."\n";

使用方法:

1# perl pwd.pl ops-coffee.cn 2opf8BImqCAXww 3# echo "admin:opf8BImqCAXww" > key/auth.key

nginx开启列目录

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

1server { 2    location download { 3        autoindex on; 4 5        autoindex_exact_size off; 6        autoindex_localtime on; 7    } 8}

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

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

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

1if ($request_filename ~* ^.*?\.(txt|pdf|jpg|png)$) { 2    add_header Content-Disposition 'attachment'; 3}

配置默认站点

1server { 2    listen 80 default; 3}

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

不允许通过IP访问

1server { 2    listen       80 default; 3    server_name  _; 4 5    return      404; 6}

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

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

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

直接返回验证文件

1location = /XDFyle6tNA.txt { 2    default_type text/plain; 3    return 200 'd6296a84657eb275c05c31b10924f6ea'; 4}

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

nginx配置upstream反向代理

1http { 2    ... 3    upstream tomcats { 4        server 192.168.106.176 weight=1; 5        server 192.168.106.177 weight=1; 6    } 7 8    server { 9        location /ops-coffee/ {  10            proxy_pass http://tomcats;  11 12            proxy_set_header Host $host; 13            proxy_set_header X-Real-IP $remote_addr; 14            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 15            proxy_set_header X-Forwarded-Proto $scheme; 16        } 17    } 18 19}

稍不注意可能会落入一个proxy_pass加杠不加杠的陷阱,这里详细说下proxy_pass http://tomcatsproxy_pass http://tomcats/的区别:

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

1.  目标地址中不带uri(proxy_pass http://tomcats)。此时新的目标url中,匹配的uri部分不做修改,原来是什么就是什么。

1location /ops-coffee/ { 2    proxy_pass  http://192.168.106.135:8181; 3} 4 5http://domain/ops-coffee/   -->     http://192.168.106.135:8181/ops-coffee/ 6http://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。

1location /ops-coffee/ { 2    proxy_pass  http://192.168.106.135:8181/; 3} 4 5http://domain/ops-coffee/   -->     http://192.168.106.135:8181 6http://domain/ops-coffee/action/abc   -->     http://192.168.106.135:8181/action/abc

nginx upstream开启keepalive

1upstream tomcat { 2    server ops-coffee.cn:8080; 3    keepalive 1024; 4} 5 6server { 7    location / { 8        proxy_http_version 1.1; 9        proxy_set_header Connection ""; 10 11        proxy_pass http://tomcat; 12    } 13}

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自动跳转到首页

1server { 2    location / { 3       error_page 404 =  @ops-coffee; 4    } 5 6    location @ops-coffee { 7       rewrite  .*  / permanent; 8    } 9}

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

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )