Ngnix常用配置及和基本功能讲解
1 内核配置
在Nginx安装目录下的conf目录中找到nginx.conf文件。提供了Ngnix的基本功能配置。 ?相关全局配置
location /users/ {
rewrite ^/users/(.*)$ /show?user=$1 break;
}虚拟主机配置 相关参数,http块可以有多个服务器块
配置层次图如下。 ![]()
1.2 配置文件示例
一个比较完整的配置文件示例如下。
# 以下是全局段配置
#user administrator administrators; #配置用户或者组,默认为nobody nobody。
#worker_processes 2; #设置进程数,默认为1
#pid /nginx/pid/nginx.pid; #指定nginx进程运行文件存放地址
error_log log/error.log debug; #制定日志路径,级别:debug|info|notice|warn|error|crit|alert|emerg
# events段配置信息
events {
accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on
multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为off
#use epoll; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
worker_connections 1024; #最大连接数,默认为512
}
# http、配置请求信息
http {
include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型,默认为text/plain
#access_log off; #取消服务日志
log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
access_log log/access.log myFormat; #combined为日志格式的默认值
sendfile on; #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
sendfile_max_chunk 100k; #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
keepalive_timeout 65; #连接超时时间,默认为75s,可以在http,server,location块。
upstream mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333 backup; #热备
}
error_page 404 https://www.baidu.com; #错误页
# 第一个Server区块开始,表示一个独立的虚拟主机站点
server {
keepalive_requests 120; #单连接请求上限次数。
listen 4545; #监听端口
server_name 127.0.0.1; #监听地址
location ~*^.+$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
#root path; #根目录
#index vv.txt; #设置默认页
proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
}
}
}1.3 locat 路线映射说明
1.3.1 格式:
location [ = | 〜| 〜* | !~ | !~* | @ ] uri {...}
1.3.2 解释:
=表示完全匹配,如果找到,立即停止搜索,立即处理请求。
~表示正常匹配,区分大小写匹配
~*表示正常匹配,不区分大小写匹配
!~区分大小写,不匹配
!~*不区分大小写 不匹配
^~ 表示仅匹配常规字符(空格)。使用前缀匹配,^表示“否”,表示不查询正则表达式。如果匹配成功,则不会再匹配其他位置。
@ 指定通常仅用于内部重定向请求的命名位置。例如error_page、try_files
uri就是要匹配的请求字符串,可能包含也可能不包含正则表达式;
1.3.3 优先级及示例:
- [未添加] 反向代理是通过 proxy_pass 指令实现的。
2.2 反向代理示例:
server { listen 80; server_name localhost; location / { proxy_pass http://localhost:8081; proxy_set_header Host $host:$server_port;#为请求头添加Host字段,用于指定请求服务器的域名/IP地址和端口号。 # 设置用户ip地址 proxy_set_header X-Forwarded-For $remote_addr;#为请求头添加XFF字段,值为客户端的IP地址。 # 当请求服务器出错去寻找其他服务器 proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;当我们访问 localhost 时,ngnix 将我们的请求转发到 localhost:8081
3 负载均衡
3.1 负载均衡的概念:
当有 2 个或更多服务器时,代理服务器根据规则将请求分发到特定的服务器进行处理。
3.2 负载均衡策略及示例:
Nginx 目前支持多种负载均衡策略。这里有6个常用的。
3.2.1RR(循环:默认投票):
每个请求按照时间顺序依次分配到不同的后端服务器,即第一个请求分配到第一个服务器,第二个请求分配到第二个服务器。第一个服务器。第一个请求被分配给另一台服务器。如果只有两台服务器,则第三个请求将继续分配给第一台服务器。如此循环下去,意味着服务器接收请求的比例为1:1。如果后端服务器宕机,可以自动删除。调用是默认配置,不需要太多配置
同一个项目使用8081和8082端口启动项目
upstream web_servers { server localhost:8081; server localhost:8082; } server { listen 80; server_name localhost; #access_log logs/host.access.log main; location / { proxy_pass http://web_servers; proxy_set_header Host $host:$server_port; }3.2.2热备:
假设有2台服务器,当其中一台服务器崩溃时,其他则启用服务器提供服务。服务器处理请求的顺序:AAAAAA。突然,A崩溃了。服务器处理请求的顺序:BBBBBBBBBBBBBB...
upstream web_servers { server 127.0.0.1:7878; server 192.168.10.121:3333 backup; #热备 }3.2.3 权重
根据配置的权重将不同数量的请求分发到不同的服务器。 。如果不设置,则默认为1。来自以下服务器的请求顺序为:ABBABBABBABBABBB....
upstream web_servers { server localhost:8081 weight=1; server localhost:8082 weight=2; }3.2.4 ip_hash
这样每个IP地址都有固定的访问后端服务器的权限,可以解决会话问题。
upstream test { ip_hash; server localhost:8080; server localhost:8081; }3.2.5 fair(第三方)
根据后端服务器的响应时间分配请求,响应时间短的优先分配。此配置是为了更快地响应用户。
upstream backend { fair; server localhost:8080; server localhost:8081; }3.2.6 url_hash(第三方)
根据访问的URL的哈希结果分发请求,使每个URL都定向到同一个后端服务器。如果后端服务器有缓存的话效率会更高。将哈希语句添加到上述流中。 hash_method是使用的哈希算法
upstream backend { hash_method crc32; hash $request_uri; server localhost:8080; server localhost:8081; }以上6种负载均衡方法适合在不同情况下单独使用或组合使用。您可以根据实际情况决定使用它们。 Fair和url_hash需要安装第三方模块才能使用。
4 动静分离:
4.1 动静分离的概念:
动静分离是指Web服务器架构中将静态页面与静态内容的动态页面或界面分离的一种架构设计方法。用于各种系统访问的动态内容接口。 ,从而提高整体服务访问效率和持久性。
4.2 动静分离示例:
upstream web_servers { server localhost:8081; server localhost:8082; } server { listen 80; server_name localhost; set $doc_root /usr/local/var/www; location ~* \.(gif|jpg|jpeg|png|bmp|ico|swf|css|js)$ { root $doc_root/img; } location / { proxy_pass http://web_servers; proxy_set_header Host $host:$server_port; } error_page 500 502 503 504 /50x.html; #出现 500 502 503 504错误时走内部跳转 location = /50x.html { root $doc_root; } }结果:访问http://localhost/test.jpg时,直接返回/usr/local/var/www/img路径下的图片。
访问 http://localhost /index.html 将访问后端服务器(tomcat 等)
5 其他常用指令:
5.1.return 指令
返回 http 状态码和可选的第二个参数可以重定向 URL
return code [text]; return code URL; return URL; 例如: location / { return 404; # 直接返回状态码 } location / { return 404 "pages not found"; # 返回状态码 + 一段文本 } location / { return 302 /bbs ; # 返回状态码 + 重定向地址 } location / { return https://www.baidu.com ; # 返回重定向地址 }5.2 重写指令
Rewrite URI 重写请求,使用重写指令在请求处理过程中多次更改请求 URI,该指令有 1 个可选参数和 2 个必需参数。
第一个(必需)参数是请求 URI 必须匹配的正则表达式。
第二个参数是用于替换匹配URI的URI。
可选第三个参数重写策略
- 最后使用重写后的URL发起新请求,重新进入服务器段并重试位置匹配;
- break直接使用重写后的URL,不再匹配其他位置的语句;
- redirect 返回临时 302 重定向;
- permanent 返回永久 301 重定向;
location /users/ { rewrite ^/users/(.*)$ /show?user=$1 break; }5.3 error_page 指令
error_page 指令允许您配置 NGINX 返回自定义页面和错误代码、替换响应中的其他错误代码或将浏览器重定向到不同的 URI。在以下示例中,error_page 指令指定返回 404 页面错误代码的页面 (/404.html)。 ?可以使用的内置变量以美元符号 $ 开头。在它们之间,客户端发送并传输大多数预定义变量的值。
- $args: #该变量与请求行中的参数相同,与$query_string
- $content_length: 请求头中的内容长度字段相同。
- $content_type:请求头中的Content-Type字段。
- $document_root:当前请求的根指令中指定的值。
- $host:请求行的主机名。如果为空,则这是 Host 请求标头字段中的主机名。如果为空,则 server_name 与请求匹配。
- $http_user_agent:客户端代理信息
- $http_cookie:客户端 cookie 信息
- $limit_rate:此变量可以限制连接速度。
- $request_method:客户端请求的操作,通常是 GET 或 POST。
- $remote_addr:客户端的IP地址。
- $remote_port:客户端端口。
- $remote_user:通过Auth基础模块验证的用户名。
- $request_filename:使用根或别名指令和请求 URI 创建的当前请求文件的路径。
- $scheme:HTTP 方法(例如 http、https)。
- $server_protocol:请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
- $server_addr:服务器地址,该值可以在完成系统调用后确定。
- $server_name:服务器名称。
- $server_port:请求到达服务器的端口号。
- $request_uri:包含除主机名之外的请求参数的原始URI,如:“/foo/bar.php?arg=baz”。
- $uri:当前不带请求参数的URI,$uri不包含主机名,如“/foo/bar.html”。
- $document_uri:与$uri相同
6 总结
Ngnix 是一个高性能的反向代理服务器。这是非常有必要学习的。本文讲解了Ngnix的基本配置,并介绍了反向代理和负载均衡、动静分离三大功能,最后对一些常用指令进行了扩展。本文介绍了Ngnix的基本使用,然后研究Ngnix的核心和原理。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网