温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Nginx的几个常用配置和技巧

发布时间:2020-08-17 22:42:59 阅读:171 作者:小咖啡111 栏目:web开发
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

文章列举了几个Nginx常见的,实用的,有趣的配置,希望看过之后能说一句:学到了!

一个站点配置多个域名


server

 {

    

listen

       

80

;

    

server_name

  ops-coffee.cn b.ops-coffee.cn;

}


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

一个服务配置多个站点


server

 {

    

listen

       

80

;

    

server_name

  a.ops-coffee.cn;


    

location

 / {

        

root

 /home/project/pa;

        

index

 index.html;

    }

}



server

 {

    

listen

       

80

;

    

server_name

  ops-coffee.cn b.ops-coffee.cn;


    

location

 / {

        

root

 /home/project/pb;

        

index

 index.html;

    }

}



server

 {

    

listen

       

80

;

    

server_name

  c.ops-coffee.cn;


    

location

 / {

        

root

 /home/project/pc;

        

index

 index.html;

    }

}


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

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

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

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

nginx添加账号密码验证


server

 {

    

location

 / {

        

auth_basic

 

"please input user&passwd"

;

        

auth_basic_user_file

 key/auth.key;

    }

}


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


# cat pwd.pl 



#!/usr/bin/perl



use

 strict;



my

 $pw=$ARGV[


] ;


print

 

crypt

($pw,$pw).

"\n"

;


使用方法:


#


 perl pwd.pl ops-coffee.cn


opf8BImqCAXww


#


 

echo

 

"admin:opf8BImqCAXww"

 > key/auth.key



nginx开启列目录

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


server

 {

    

location

 download {

        

autoindex

 

on

;


        

autoindex_exact_size

 

off

;

        

autoindex_localtime

 

on

;

    }

}


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

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

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






if


 (


$request_filename


 


~* ^.*?\.(txt|pdf|jpg|png)$)


 {



    


add_header


 Content-Disposition 


'attachment'


;



}




配置默认站点


server

 {

    

listen

 

80

 default;

}


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

不允许通过IP访问


server

 {

    

listen

       

80

 default;

    

server_name

  _;


    

return

      

404

;

}


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

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


server

 {

    

rewrite


 ^/(.*)$

 https://ops-coffee.cn/

$1

    

permanent

;

}


直接返回验证文件


location

 = /XDFyle6tNA.txt {

    

default_type

 text/plain;

    

return

 

200

 

'd6296a84657eb275c05c31b10924f6ea'

;

}


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

nginx配置upstream反向代理

http {

    ...

    upstream tomcats {

        server 

192.168


.106


.176

 weight=

1

;

        server 

192.168


.106


.177

 weight=

1

;

    }


    server {

        location /ops-coffee/ { 

            proxy_pass http:

//tomcats; 



            proxy_set_header Host $host;

            proxy_set_header X-Real-IP $remote_addr;

            proxy_set_header X-Forwarded-

For

 $proxy_add_x_forwarded_for;

            proxy_set_header X-Forwarded-Proto $scheme;

        }

    }


}


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

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

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

location 

/ops-coffee/

 {

    proxy_pass  http:

//


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_pass  http:

//


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


upstream

 tomcat {

    

server

 ops-coffee.cn:

8080

;

    

keepalive

 

1024

;

}



server

 {

    

location

 / {

        

proxy_http_version

 

1

.

1

;

        

proxy_set_header

 Connection 

""

;


        

proxy_pass

 http://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_page

 

404

 =  

@ops

-coffee;

    }


    

location

 

@ops

-coffee {

       

rewrite

  .*  / 

permanent

;

    }

}


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

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

原文链接:http://blog.itpub.net/31560357/viewspace-2644667/

AI

开发者交流群×