Nginx配置:修订间差异
无编辑摘要 |
|||
第173行: | 第173行: | ||
==== 隐藏式跳转 ==== | ==== 隐藏式跳转 ==== | ||
访问 <nowiki>http://www.mkwiki.tk,以及http://mwwiki.eu.org,实际访问</nowiki> <nowiki>http://www.mwbbs.tk/wiki/</nowiki> | 访问 <nowiki>http://www.mkwiki.tk,以及http://mwwiki.eu.org,实际访问</nowiki> <nowiki>http://www.mwbbs.tk/wiki/</nowiki> | ||
server { | |||
listen 80; | |||
server_name www.mkwiki.tk mwwiki.eu.org; | |||
server { | |||
location / { | |||
proxy_pass http://www.mwbbs.tk/wiki/; | |||
index index.html index.htm index.php; | |||
} | |||
} | |||
} | |||
==== 显式跳转 ==== | ==== 显式跳转 ==== | ||
访问 <nowiki>http://www.mkwiki.tk,以及http://mwwiki.eu.org,实际地址跳转为</nowiki> <nowiki>http://www.mwbbs.tk/wiki/</nowiki> | 访问 <nowiki>http://www.mkwiki.tk,以及http://mwwiki.eu.org,实际地址跳转为</nowiki> <nowiki>http://www.mwbbs.tk/wiki/</nowiki> | ||
server { | |||
listen 80; | |||
server_name wiki.mwbbs.tk mwwiki.eu.org; | |||
location / { | |||
#proxy_pass http://www.mwbbs.tk/wiki/; | |||
rewrite ^/(.*) http://www.mwbbs.tk/wiki/$1 permanent; | |||
index index.html index.htm index.php; | |||
} | |||
} | |||
[[分类:Develop]] | [[分类:Develop]] | ||
[[分类:Platform]] | [[分类:Platform]] | ||
[[分类:Web]] | [[分类:Web]] |
2023年8月5日 (六) 23:07的版本
Nginx 是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供了 IMAP/POP3/SMTP 服务。Nginx 是由伊戈尔·赛索耶夫(Igor Sysoev)2002年在俄罗斯访问量第二的 Rambler.ru 站点(Рамблер)时开发的。
源代码以类BSD许可证的形式发布,因它的高并发、稳定性、低系统资源占用、丰富的功能集、简单的配置文件而闻名。
Nginx 可以根据不同的正则匹配,采取不同的转发策略,如图片文件结尾的走文件服务器,动态页面走 web 服务器,Nginx 可以对返回结果进行错误页跳转,异常判断等,且如果被分发的服务器存在异常,可以将请求重新转发给另外一台服务器,然后自动去除异常服务器。
Nginx 模块需要集成到内核中,不能动态加载。要包含非标准模块,用户必须从源代码编译。(Apache 具有动态加载模块的能力)
重启服务
nginx -t #结果显示ok和success没问题便可重启 nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful nginx -s reload OR systemctl restart nginx
代理
- 正向代理:局域网中的客户端通过代理服务器访问Internet
- 反向代理:客户端将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端。反向代理服务器可以隐藏了真实服务器 IP地址
正向代理代理客户端,反向代理代理服务器。
负载均衡
- 内置策略:轮询、加权轮询、Ip hash
- 扩展策略
web缓存
对不同的文件做不同的缓存处理,配置灵活,并且支持 FastCGI_Cache,主要用于对 FastCGI 的动态程序进行缓存。
代理服务器可以缓存原始资源服务器的资源,而不是每次都要向原始资源服务器请求数据,特别是一些静态的数据,比如图片和文件。如果代理服务器和客户端来自同一个网络(或一个城域网),那么客户端访问代理服务器,就会得到很高质量的速度——而这正是 CDN 技术的核心。
配置文件
Nginx 默认的配置文件是在安装目录的 conf 目录下,修改过 nginx.conf 配置文件,需要重启Nginx服务。
查看配置文件 nginx.conf 路径:nginx -t
Nginx 1.18 版本默认路径:/etc/nginx/sites-available/default
nginx.conf 配置文件分为三部分:
全局块
从配置文件开始到 events 块之间的内容,主要会设置一些影响 Nginx 服务器整体运行的配置指令。主要包括:配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。如:
worker_processes 8; # 并发设置
events 块
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括:是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 work process 可以同时支持的最大连接数等。如:
events {
process 1024; # 最大连接数
}
http 块
这部分是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。需要注意的是:http 块也可以包括 http 全局块、server 块。下面的反向代理、动静分离、负载均衡都是在这部分中配置。
- http 全局块:http 全局块配置的指令包括:文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等
- server 块:这块和虚拟主机有密切关系,从用户角度看,虚拟主机和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本
每个http块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。
http: server 配置
listen
- listen IP_address:port #监听指定的地址和端口号,如果只定义了IP地址,没有定义端口号,那么就使用80端口
- listen IP_address #监听指定 ip 地址所有端口,如果是 IPV6 地址,需要使用中括号[] ,如[fe80::1]等
- listen *:80 | *:8080 #监听所有 80 端口和 8080 端口,
- listen 80 #监听该端口的所有IP连接
server_name
server_name name name ...,多个名称,中间用空格隔开。
- server_name abc.com www.abc.com
可以使用通配符“*”,但通配符只能用在由三段字符组成的首段或者尾端,或者由两端字符组成的尾端
- server_name *.abc.com www.abc.*
- 使用正则表达式,用“~”作为正则表达式字符串的开始标记
location
该指令用于匹配 URL
location [ PATTERN ] url {
}
PATTERN
- = 用于不含正则表达式的 uri 前,要求请求字符串与 url 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求
- ~ 用于表示 url 包含正则表达式,并且区分大小写
- ~* 用于表示 url 包含正则表达式,并且不区分大小写
- ^~ 用于不含正则表达式的 url 前,要求 Nginx 服务器找到标识 url 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 url 和请求字符串做匹配
注意:如果 url 包含正则表达式,则必须要有 ~ 或者 ~* 标识。
proxy_pass
用于设置被代理服务器的地址。可以是主机名称、IP地址加端口号的形式
proxy_pass URL;
index
用于设置网站的默认首页
index index.html index.php;
- 在请求访问网站时,请求地址可以不写首页名称
- 可以对一个请求,根据请求内容而设置不同的首页
rewrite
URL 重写
rewrite ^/(.*) http://www.abc.tk/wiki/$1 permanent;
rewrite <regex> <replacement> [flag];
- regex:perl 兼容正则表达式
- replacement:将正则匹配的内容替换
- flag:标记
- last 匹配完成后继续,向下匹配新的 location URI 规则
- break 匹配完成终止,不再匹配后面的任何规则
- redirect 返回 302 临时重定向,显示跳转后的 URL 地址
- permanent 返回 301 永久重定向,显示跳转后的 URL 地址
应用场景
- 调整用户浏览的 URL,看起来更规范
- 让搜索引擎搜录网站内容及用户体验更好,会将动态 URL 地址伪装成静态地址
- 将旧的访问域名跳转到新的域名上
- 根据特殊变量、目录、客户端的信息进行URL调整
Example
端口隐藏
访问 http://www.abc.tk,实际访问 http://127.0.0.1:8080
## Sample
serve {
listen 80;
server_name www.abc.tk;
location {
proxy_pas http://127.0.0.1:8080/;
index index.htm index.ht index.php;
}
}
这段配置一般情况下都正常,但偶尔会出错——服务器给客户端的跳转指令里加了端口号,如 http://127.0.0.1:8080/index.html。
因为 nginx 服务器侦听的是 80 端口,所以这样的 URL 给了客户端,必然会出错。
针对这种情况,加一条 proxy_redirect 指令重定向 url:
proxy_redirect http://127.0.0.1:8080/ /;
即把所有 “http://127.0.0.1:8080/” 的内容替换成 “/” 再发给客户端。
隐藏式跳转
访问 http://www.mkwiki.tk,以及http://mwwiki.eu.org,实际访问 http://www.mwbbs.tk/wiki/
server { listen 80; server_name www.mkwiki.tk mwwiki.eu.org; location / { proxy_pass http://www.mwbbs.tk/wiki/; index index.html index.htm index.php; } }
显式跳转
访问 http://www.mkwiki.tk,以及http://mwwiki.eu.org,实际地址跳转为 http://www.mwbbs.tk/wiki/
server { listen 80; server_name wiki.mwbbs.tk mwwiki.eu.org; location / { #proxy_pass http://www.mwbbs.tk/wiki/; rewrite ^/(.*) http://www.mwbbs.tk/wiki/$1 permanent; index index.html index.htm index.php; } }