文章列举了几个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填写不同的域名即可
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列目录
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
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即可,无需真正的把文件给放到服务器上
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
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
server
{
location
/ {
error_page
404
=
@ops
-coffee;
}
location
@ops
-coffee {
rewrite
.* /
permanent
;
}
}
网站出现404页面不是特别友好,我们可以通过上边的配置在出现404之后给自动跳转到首页去
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。