- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Nginx的一些常用配置与技巧总结由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
前言 。
文章列举了几个Nginx常见的,实用的,有趣的配置,希望看过之后能说一句:学到了! 。
一个站点配置多个域名 。
1
2
3
4
|
server {
listen 80;
server_name ops-coffee.cn b.ops-coffee.cn;
}
|
server_name 后跟多个域名即可,多个域名之间用空格分隔 。
一个服务配置多个站点 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
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添加账号密码验证 。
1
2
3
4
5
6
|
server {
location / {
auth_basic
"please input user&passwd"
;
auth_basic_user_file key
/auth
.key;
}
}
|
有很多服务通过nginx访问,但本身没有提供账号认证的功能,就可以通过nginx提供的authbase账号密码认证来实现,可以用以下脚本来生成账号的密码 。
1
2
3
4
5
6
|
# cat pwd.pl
#!/usr/bin/perl
use strict;
my $pw=$ARGV[0] ;
print crypt($pw,$pw).
"\n"
;
|
使用方法:
1
2
3
|
# perl pwd.pl ops-coffee.cn
opf8BImqCAXww
# echo "admin:opf8BImqCAXww" > key/auth.key
|
nginx开启列目录 。
当你想让nginx作为文件下载服务器存在时,需要开启nginx列目录 。
1
2
3
4
5
6
7
8
|
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等文件时会在浏览器上显示文件的内容,如果你想让浏览器直接下载,加上下边的配置 。
1
2
3
|
if
($request_filename ~* ^.*?\.(txt|pdf|jpg|png)$) {
add_header Content-Disposition
'attachment'
;
}
|
配置默认站点 。
1
2
3
|
server {
listen 80 default;
}
|
当一个nginx服务上创建了多个虚拟主机时默认会从上到下查找,如果匹配不到虚拟主机则会返回第一个虚拟主机的内容,如果你想指定一个默认站点时,可以将这个站点的虚拟主机放在配置文件中第一个虚拟主机的位置,或者在这个站点的虚拟主机上配置listen default 。
不允许通过IP访问 。
1
2
3
4
5
6
|
server {
listen 80 default;
server_name _;
return
404;
}
|
可能有一些未备案的域名或者你不希望的域名将服务器地址指向了你的服务器,这时候就会对你的站点造成一定的影响,需要禁止IP或未配置的域名访问,我们利用上边所说的default规则,将默认流量都转到404去 。
上边这个方法比较粗暴,当然你也可以配置下所有未配置的地址访问时直接301重定向到你的网站去,也能为你的网站带来一定的流量 。
1
2
3
|
server {
rewrite ^/(.*)$ https:
//ops-coffee
.cn/$1 permanent;
}
|
直接返回验证文件 。
1
2
3
4
|
location =
/XDFyle6tNA
.txt {
default_type text
/plain
;
return
200
'd6296a84657eb275c05c31b10924f6ea'
;
}
|
很多时候微信等程序都需要我们放一个txt的文件到项目里以验证项目归属,我们可以直接通过上边这种方式修改nginx即可,无需真正的把文件给放到服务器上 。
nginx配置upstream反向代理 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
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部分不做修改,原来是什么就是什么.
1
2
3
4
5
6
|
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.
1
2
3
4
5
6
|
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 。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
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自动跳转到首页 。
1
2
3
4
5
6
7
8
9
|
server {
location / {
error_page 404 = @ops-coffee;
}
location @ops-coffee {
rewrite .* / permanent;
}
}
|
网站出现404页面不是特别友好,我们可以通过上边的配置在出现404之后给自动跳转到首页去 。
总结 。
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我的支持.
原文链接:https://mp.weixin.qq.com/s/JyUnN_OtQ2NtXcH0mtCJUg 。
最后此篇关于Nginx的一些常用配置与技巧总结的文章就讲到这里了,如果你想了解更多关于Nginx的一些常用配置与技巧总结的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我有一个无所事事的盒子,已经运行了一段时间,今天,由于某种原因,当我尝试重新启动nginx时,得到了以下提示。 nginx: [emerg] host not found in upstream "w
我注意到,当我使用 ubuntu 命令“nginx”启动 nginx 并执行 systemctl status nginx 时。它表明 systemctl 已禁用。此外,如果我首先使用命令 syste
我的 nginx 配置如下: proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $re
周围有两个配置文件,/etc/nginx/conf.d/default.conf和 /etc/nginx/nginx.conf,但是启用了哪一个呢?我运行的是 CentOS6.4 和 nginx/1.
我的 Nginx 配置仅适用于根位置,所有其他位置都返回“Cannot GET {location}”,其中位置是域后地址的其余部分。 这是我的/etc/nginx/sites-enabled/def
我在 nginx 中为 node.js 服务器设置了反向代理。 server { listen 80; server_name sub.domain.tld; location
我的应用程序将在两个位置提供静态文件,一个是/my/path/project/static,另一个是/my/path/project/jsutils/static。 我很难让网络服务器在两个目录中查找
我的域名注册商的 DNS 访问我的服务器并获取 nginx 默认页面,因此配置正确 我复制了一个当前正在工作的 nginx 虚拟主机,更改了 server_name和 conf 文件的名称,仅此而已。
这个问题在这里已经有了答案: Can't login in to phpPgAdmin (2 个回答) 3年前关闭。 我在centos中遇到了phpPgAdmin登录的奇怪问题,我做了所有需要的事情
我要为PoC进行的操作是向来自动态后端服务器的网页添加href。使用“ subs_filter”可以很容易地添加href,但是我需要使用响应中嵌入的信息来构造href。 是否可以使用LUA处理来自pr
我有网站服务器,它有两个代理(鱿鱼,CF),它们使用不同的 header 来获取真实的 ip。 我猜 nginx 命令 set_real_ip_from ;real_ip_header X-Forwa
在控制台显示如下: Job for nginx.service failed because the control process exited witherror code. See "syste
我有一个问题,我怀疑是 NGINX 问题。基本上,当我尝试登录到我创建的网站时,出现以下错误…… 您要查找的页面暂时不可用。请稍后再试。 有没有人以前遇到过这个? 最佳答案 如果 NGINX 虚拟主机
这是我的 nginx 配置文件: server { listen 80; server_name localhost; location / {
在我的/etc/nginx/nginx.conf 文件中,我有配置。作为:- user nginx; worker_processes 1; error_log /var/log/nginx/e
有谁知道nginx支持软退出吗?这意味着它会一直运行直到所有连接都消失或超时(超过特定时间间隔)并且在此期间也不允许新连接吗? 例如: nginx stop nginx running (2 conn
有没有办法将 Nginx 配置为类似这样的直接服务器返回 (DSR) 负载平衡器: http://blog.haproxy.com/2011/07/29/layer-4-load-balancing-
我通过 apt-get 安装了 Nginx不久前在 Debian 上,我有几个网站在上面。现在我需要安装一些额外的模块,因为我不想搞砸任何事情,所以我想在执行之前仔细检查我的过程。希望这也能帮助其他不
我知道 Apache 的 pagespeed 模块可以使页面访问更快,所以,我想知道 Nginx 是否有等效的模块? 提前致谢! 最佳答案 https://github.com/pagespeed/n
如何将worker_rlimit_nofile设置为一个更大的数字,它可以是或建议最大为多少? 我正在尝试遵循以下建议: 大多数人遇到的第二个最大限制是 与您的操作系统有关。打开一个shell,su给
我是一名优秀的程序员,十分优秀!