网站专题二级页怎么做,广西南宁生活网,2017网站开发合同下载,wordpress怎么添加备案关于 Nginx 的哪些事 1、Nginx 主要功能2、Nginx 的常用命令2.1、启动Nginx2.2、停止 Nginx2.3、重新加载Nginx 配置2.4、检查Nginx配置文件2.5、指定配置文件2.6、检查Nginx版本2.7、显示Nginx帮助信息 3、Nginx 配置文件 nginx.conf3.1、Nginx 配置文件#xff08;nginx.con… 关于 Nginx 的哪些事 1、Nginx 主要功能2、Nginx 的常用命令2.1、启动Nginx2.2、停止 Nginx2.3、重新加载Nginx 配置2.4、检查Nginx配置文件2.5、指定配置文件2.6、检查Nginx版本2.7、显示Nginx帮助信息 3、Nginx 配置文件 nginx.conf3.1、Nginx 配置文件nginx.conf组成部分3.2、Nginx 配置文件nginx.conf示例 4、反向代理4.1、简单示例4.2、location 语法4.2.1、精准匹配4.2.2、普通匹配^~4.2.3、正则匹配~4.2.4、默认根路径匹配/4.2.5、nginx内部跳转4.2.6、location URI结尾带不带 / 5、负载均衡5.1、简单示例5.2、常用负载均衡策略5.2.1、轮询5.2.2、权重轮询5.2.3、IP哈希5.2.4、最少连接 6、动静分离7、Nginx 限流7.1、基于IP限流7.2、基于URL限流 1、Nginx 主要功能 Nginx主要功能 正向代理需要在客户端配置代理服务器进行指定网站访问。 反向代理反向代理是Nginx的常见功能之一。当客户端向服务器发送请求时首先经过Nginx服务器然后Nginx将请求转发给内部的Web服务器。这种代理方式使得外部网络无法直接访问内部的Web服务器提高了安全性。 负载均衡它将网络流量分担到多个网络节点上并行处理请求从而提高网络系统的处理能力减少前端用户等待响应的时间。 动静分离将动态网页和静态页面分开处理。通过动静分离Nginx可以充分利用其高并发、高性能的特点同时减轻后端服务器的负载提高网站的访问速度和可维护性。 2、Nginx 的常用命令 2.1、启动Nginx # 首先进入 Nginx 目录 (一般在该目录具体根据实际安装情况而定)
cd /usr/local/nginx
# 启动 Nginx
./sbin/nginx# 或者直接执行
/usr/local/nginx/sbin/nginx 2.2、停止 Nginx # 首先进入 Nginx 目录 (一般在该目录具体根据实际安装情况而定)
cd /usr/local/nginx
# 停止 Nginx
./sbin/nginx -s stop
# 或者在 Nginx 目录执行
./sbin/nginx -s quit# 或者直接执行
/usr/local/nginx/sbin/nginx -s stop
# 或
/usr/local/nginx/sbin/nginx -s quit2.3、重新加载Nginx 配置 # 首先进入 Nginx 目录 (一般在该目录具体根据实际安装情况而定)
cd /usr/local/nginx
# 重新加载Nginx 配置
./sbin/nginx -s reload2.4、检查Nginx配置文件 # 首先进入 Nginx 目录 (一般在该目录具体根据实际安装情况而定)
cd /usr/local/nginx
# 检查Nginx配置文件是否正确
./sbin/nginx -t2.5、指定配置文件 # 首先进入 Nginx 目录 (一般在该目录具体根据实际安装情况而定)
cd /usr/local/nginx
# 指定配置文件在命令行中添加 -c 参数。例如
./sbin/nginx -c /usr/local/nginx/conf/nginx.conf2.6、检查Nginx版本 # 首先进入 Nginx 目录 (一般在该目录具体根据实际安装情况而定)
cd /usr/local/nginx
# 检查Nginx版本
./sbin/nginx -V
# 或者在Nginx目录中执行
./sbin/nginx -v2.7、显示Nginx帮助信息 # 首先进入 Nginx 目录 (一般在该目录具体根据实际安装情况而定)
cd /usr/local/nginx
# 显示Nginx帮助信息
./sbin/nginx -h3、Nginx 配置文件 nginx.conf Nginx 配置文件路径一般在 /etc/nginx/nginx.conf 或 /usr/local/nginx/conf/nginx.conf 3.1、Nginx 配置文件nginx.conf组成部分 ① 全局块从配置文件开始到events块之间的内容主要设置一些影响nginx服务器整体运行的配置命令如worker_processes、worker_processes值等。 ② events块主要配置Nginx服务器与用户的网络连接包括是否开启对多work process下的网络连接进行序列化是否允许同时接收多个网络连接等。 ③ http块这是Nginx服务器配置中最频繁的部分包括http全局块、server块等。http全局块配置指令包括文件引入、MIME-TYPE定义、日志定义、连接超时时间、单链接请求数上限等。
此外Nginx还支持对stream和server块的配置stream块用于配置HTTP和SMTP代理服务器的代理设置server块用于配置虚拟主机的设置。 3.2、Nginx 配置文件nginx.conf示例 # 指定Nginx服务器的用户
user nginx;
# 指定Nginx服务器的工作进程数。
worker_processes 1;
# 指定错误日志存放路径
error_log /var/log/nginx/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;# 指定Nginx进程的存放路径。
pid /var/run/nginx.pid; events { # 指定每个worker process的最大连接数worker_connections 1024; # 指定Nginx服务器的工作进程数。# worker_processes 20;# 指定是否允许一个worker process同时接收多个网络连接。multi_accept on;
} http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main $remote_addr - $remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; # gzip开启gzip压缩减少传输数据量。# gzip on;# 该 server 配置了Nginx作为反向代理服务器# 将所有以example.com为域名的HTTP请求转发到192.168.1.100:8080的目标服务器。server { # listen指定Nginx监听的端口号。例如listen 80,表示Nginx将监听80端口。listen 80; # server_name指定服务器名称可以是一个域名或多个域名。# 指定Nginx要代理的域名,表示Nginx将代理example.com域名的请求。server_name example.com; # charset设置字符集。# charset koi8-r;# access_log logs/host.access.log main;# 指定要代理的请求路径。例location / { ... }表示Nginx将对所有请求进行代理# location /匹配所有以该主机名开头的URL路径。location / { # 指定代理的目标服务器。# 这里指Nginx将所有请求代理到192.168.1.100:8080的目标服务器。proxy_pass http://192.168.1.100:8080; # index指定默认页面可以是index.html、index.htm或index.nginx-debian.html。# index index.html index.htm;# try_files用于尝试访问本地文件或定义的其他动作如重定向、返回特定状态码等。# try_files $uri $uri/ /index.html;} # error_page指定错误页面用于处理特定错误码的页面。#error_page 404 /404.html;# redirect server error pages to the static page /50x.html# error_page指定错误页面用于处理特定错误码的页面。error_page 500 502 503 504 /50x.html;location /50x.html {root html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {# proxy_pass http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {# root html;# fastcgi_pass 127.0.0.1:9000;# fastcgi_index index.php;# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;# include fastcgi_params;#}# deny access to .htaccess files, if Apaches document root# concurs with nginxs one##location ~ /\.ht {# deny all;#}} # 该server段落配置了Nginx作为反向代理和HTTPS代理服务器。# 这里将所有以example.com为域名的HTTPS请求转发到192.168.1.100:8080的目标服务器 # 并使用SSL证书进行加密传输。server { # listen指定Nginx监听的端口号。listen 443 ssl; # server_name指定服务器名称可以是一个域名或多个域名。# 指定Nginx要代理的域名,表示Nginx将代理example.com域名的请求。server_name example.com; # ssl_certificate指定SSL证书的路径。# 这里表示Nginx将使用位于/etc/nginx/ssl/nginx.crt的SSL证书。ssl_certificate /etc/nginx/ssl/nginx.crt; ssl_certificate_key /etc/nginx/ssl/nginx.key; # ssl_session_cache shared:SSL:1m;# ssl_session_timeout 5m;# ssl_ciphers HIGH:!aNULL:!MD5;# ssl_prefer_server_ciphers on;# location 用于匹配特定URL并定义相应的代理规则或静态文件路径。location / { # proxy_pass定义反向代理规则。proxy_pass http://192.168.1.100:8080; } } # #server {# listen 8000;# listen somename:8080;# server_name somename alias another.alias;# location / {# root html;# index指定默认页面可以是index.html、index.htm或index.nginx-debian.html。# index index.html index.htm;# }#}}4、反向代理 4.1、简单示例 在下面示例中Nginx作为反向代理服务器将所有以example.com为域名的HTTP请求转发到192.168.1.100:8080的目标服务器。同时通过proxy_set_header指令设置了一些必要的请求头信息以便目标服务器正确地处理请求。该示例仅适用于HTTP协议的代理配置。 server { listen 80; server_name example.com; # location /匹配所有以该主机名开头的URL路径。location / { proxy_pass http://192.168.1.100:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
}注意目标服务器需要对外开放访问的端口
# 以下是基于 CentOS7 版本的防火墙相关命令。# 查看防火墙状态
firewall-cmd --state# 如果防火墙处于关闭状态先启动它
systemctl start firewalld.service# 防火墙开放8080 端口号
firewall-cmd --add-port8080/tcp --permanent# 重启防火墙以使更改生效
systemctl restart firewalld.service# 重新加载防火墙配置
firewall-cmd –reload# 查看已经开放的端口号
firewall-cmd --list-all4.2、location 语法 在NGINX中location指令用于定义请求匹配的URL路径和相应的配置。它是在NGINX配置文件中的server块内使用的。下面是location指令的基本语法
location [|~|~*|^~] /path { # 配置指令
}# 说明表示完全匹配指定的路径。
~ 表示使用正则表达式匹配路径。
~* 表示不区分大小写的正则表达式匹配路径。
^~ 表示前缀匹配路径但不使用正则表达式。 location 匹配优先级 大于 ^~ 大于 ~ | ~* 大于 最长前缀匹配 大于 / 4.2.1、精准匹配 精准匹配的符号标记为“”示例
# 如果请求URI和精准匹配的模式字符串/api完全相同那么精准匹配通过.
# 在所有的匹配类型中精准匹配的优先级最高.
location /api {proxy_pass http://192.168.1.100:8080;
}# 假设 server_name example.com;
# 只匹配http://example.com/abc
# http://example.com/api [匹配成功]
# http://example.com/api/index [匹配失败]4.2.2、普通匹配^~ 普通匹配的符号标记为“~”普通匹配是前缀匹配也是Nginx默认的匹配类型。类型符号“~”可以省略如果location没有任何匹配类型就为普通的前缀匹配。示例
# 普通匹配如果请求路径URI头部匹配到location的模式字符串那么匹配成功。
# 如果匹配到多个前缀那么最长模式匹配优先
# 匹配以/api/开头的所有请求
location ^~ /api/ {proxy_pass http://192.168.1.100:8080;
}location ^~ /api/demo {proxy_pass http://192.168.1.101:8081;
}# 假设 server_name example.com;
#以 /api/ 开头的请求都会匹配上
#http://example.com/api/index.page [匹配成功]
#http://example.com/error/error.page [匹配失败]# 以上 http://example.com/api/demo/index.page 请求 [匹配成功]
# 且 http://example.com/api/demo/index.page 请求优先匹配目标http://192.168.1.101:8081location ^~ /api/ {proxy_pass http://192.168.1.100:8080;
}
# 等同于
location /api/ {proxy_pass http://192.168.1.100:8080;
}4.2.3、正则匹配~ 正则匹配的类型根据类型符号的不同可以细分为以下4种 ~标准正则匹配区分字母大小写进行正则表达式测试若测试成功则匹配成功。 ~*标准正则匹配不区分字母大小写进行正则表达式测试若测试成功则匹配成功。 !~反向正则匹配区分字母大小写进行正则表达式测试若测试不成功则匹配成功。 !~*反向正则匹配不区分字母大小写进行正则表达式测试若测试不成功则匹配成功。 # ~ 区分字母大小写
location ~ /Api/ {proxy_pass http://192.168.1.100:8080;
}
# 假设 server_name example.com;
#http://example.com/Api/ [匹配成功]
#http://example.com/api/ [匹配失败]# ~* 不区分字母大小写
location ~* /Api/ {proxy_pass http://192.168.1.100:8080;
}
# 假设 server_name example.com;
# 则会忽略 uri 部分的大小写
#http://example.com/Api/ [匹配成功]
#http://example.com/api/ [匹配成功]4.2.4、默认根路径匹配/ 根路径的路径规则就是使用单个“/”符号示例
# 匹配所有以该主机名开头的URL路径。
location / {proxy_pass http://192.168.1.100:8080;
}4.2.5、nginx内部跳转 location /index/ {error_page 404 index_error;
}
location index_error {.....
}
#以 /index/ 开头的请求如果链接的状态为 404。则会匹配到 index_error 这条规则上。4.2.6、location URI结尾带不带 / 在 Nginx 中location指令用于匹配请求的 URL并根据匹配的结果来配置相应的代理、重定向、静态文件服务等操作。在 location指令中URL最后是否带有斜杠/会对匹配的结果产生一些区别。浏览器在发起请求的时候默认加上了 / 。虽然很多浏览器在地址栏里也不会显示 / 。
URL最后带有斜杠/ 当 URL 以斜杠结尾时location指令会精确匹配该 URL。例如如果配置了location /foo/则只有请求的 URL 为 /foo/ 时才会匹配但不匹配 /foo 或 /foo123 等。如果请求的 URL 是 /foo/bar则不会匹配 location /foo/因为最后有一个额外的路径片段bar。如果需要匹配以foo结尾的所有 URL包括/foo/和/foo/bar等可以使用正则表达式例如location ~ ^/foo/$。 URL最后没有斜杠/ 当 URL 不以斜杠结尾时location指令会匹配以该 URL 为前缀的所有 URL。例如如果配置了location /foo则请求的 URL 为/foo、/foobar、/foo/bar等以/foo为前缀的 URL 都会匹配。如果请求的 URL 是/foo/bar则会匹配location /foo因为/foo是该 URL 的前缀。 总结起来是否在 location指令的 URL 最后加上斜杠决定了是精确匹配还是前缀匹配。具体使用哪种方式取决于你的需求如果需要精确匹配某个 URL可以使用斜杠结尾如果需要匹配某个前缀的所有 URL则可以去掉斜杠。 5、负载均衡 5.1、简单示例 # 使用 upstream 块定义了一个名为 backend 的后端服务器组。
# 在该后端服务器组中列出了三个后端服务器
# 192.168.1.100:8080、192.168.1.101:8081 和 192.168.1.102:8082
upstream backend { server 192.168.1.100:8080; server 192.168.1.101:8081; server 192.168.1.102:8082;
} server { listen 80; server_name example.com; location / { proxy_pass http://backend; # 在这里配置其他相关的反向代理设置 }
}5.2、常用负载均衡策略 以下是几种常见的策略轮询、权重、IP哈希、最少连接。 5.2.1、轮询 轮询Round Robin每个请求按时间顺序逐一分配到不同的后端服务器。如果后端服务器down掉Nginx会自动剔除该服务器。
# 默认采用轮询策略,示例
upstream backserver { server 192.168.0.14; server 192.168.0.15;
}5.2.2、权重轮询 权重轮询Weighted Round Robin在轮询策略的基础上指定每个后端服务器的轮询几率权重值越高的服务器被选择的可能性就越大。
# 使用示例
upstream backserver { server 192.168.0.14 weight2; server 192.168.0.15 weight1;
}5.2.3、IP哈希 IP哈希IP Hash指定负载均衡器按照基于客户端IP的分配方式。这个方法确保了相同的客户端的请求一直发送到相同的后端服务器以保持会话一致性。
# 使用示例
upstream backserver { ip_hash; server 192.168.0.14; server 192.168.0.15;
}5.2.4、最少连接 最少连接Least Connections把请求转发给连接数最少的后端服务器。轮询算法是把请求平均的转发给各个后端使它们的负载大致相同但是有些请求占用的时间很长会导致其所在的后端负载较高。使用最少连接策略可以更好地平衡负载。
# 使用示例
upstream backserver { least_conn; server 192.168.0.14; server 192.168.0.15;
}6、动静分离 Nginx 的动静分离是指将动态请求和静态请求分发到不同的后端处理。
动态请求通常需要与数据库等进行交互处理逻辑较为复杂。而静态请求则是指只需要直接返回静态文件或资源的请求处理速度较快。
通过动静分离可以将动态请求交给专门的动态服务器处理而静态请求则可以由更高效的静态服务器处理从而提高整体的处理性能和响应速度。 server { listen 80; server_name example.com; # 动态请求location /dynamic { proxy_pass http://dynamic_server;}location /css { # root指令用于指定静态文件的根目录root /path/to/css; } location /js { # root指令用于指定静态文件的根目录root /path/to/js; } # 页面访问方式一location /front {root /data;index index.html;}# 页面访问方式二location /web {alias /data/front;index index.html;}# 图片访问方式一:location /static {root /data/front; }# 图片访问方式二:location /photo {alias /data/front/static;}
}注意alias和root指令都是用于指定文件路径的但它们的使用方式和效果有所不同。
alias指令用于指定匹配的URL段对应的文件或目录的路径。当请求的URL匹配location块中配置的URL段时NGINX会将其重定向到alias指令指定的路径下对应的文件或目录。这意味着请求的URL将会发生变化从原来的URL变为新的URL。
例如下面的配置将请求的URL为/images/example.jpg重定向到/var/www/html/images/example.jpg
location /images { alias /var/www/html/images;
}root指令则是指定最上层目录的定义它不会改变请求的URL。当请求的URL匹配location块中配置的URL段时NGINX会在指定的目录下查找对应的文件。
例如下面的配置将请求的URL为/images/example.jpg映射到/var/www/html/images/example.jpg
location /images { root /var/www/html;
}7、Nginx 限流 nginx可以通过以下方式实现限流基于IP限流、基于URL限流、基于时间限流。
7.1、基于IP限流 基于IP的限流,可以有效地控制每个IP地址的请求频率和请求数有助于防止恶意攻击和保护服务器的性能。 需要注意的是限流区域的配置和限流指令的应用需要根据实际需求进行调整和优化。 示例配置
# 创建限流区域one限制每个IP的请求频率为1次/秒
# $binary_remote_addr 是用于存储限流信息的共享内存名称,使用了10MB的共享内存
limit_req_zone $binary_remote_addr zoneone:10m rate1r/s;
# 创建限流区域two限制每个IP的请求频率为2次/秒
limit_req_zone $binary_remote_addr zonetwo:10m rate2r/s; server { location / { # 使用limit_req指令指定使用one限流区域# 设置burst参数为1表示允许每个IP在突发情况下最多多发送一个请求。limit_req zoneone burst1; ... }
}限流算法 nginx的限流算法使用了漏桶算法。 当请求到达时会先检查对应的限流桶中的请求数量是否已经达到限制速率。 如果未达到限制速率则允许请求通过并在限流桶中增加一个请求。 如果达到限制速率则需要检查是否允许突发请求。 如果允许突发请求则允许请求通过并在限流桶中增加一个请求同时记录突发请求数 如果不允许突发请求则直接拒绝请求。 7.2、基于URL限流 基于URL的限流可以有效地控制每个URL的请求频率和请求数有助于保护服务器的性能和防止滥用。 基于URL的限流方式适用于限制某些频繁访问的URL或者限制对某些重要接口的请求频率以保护服务器资源或者控制某些URL的使用。 需要注意的是限流区域的配置和限流指令的应用需要根据实际需求进行调整和优化。
示例配置
# 实现基于URL的限流要先配置限流区域 limit_req_zone,限流区域是一个存储URL和相关统计信息的缓存区。
# $uri 用于存储限流信息的共享内存名称这里创建了一个名为one的限流区域使用了10MB的共享内存。
# rate 是每个URL的请求限制速率这里限制了每个URL的请求频率为1次/秒。
limit_req_zone $uri zoneone:10m rate1r/s;location /api/ { # 针对/api/路径进行限流,limit_req指令来指定使用限流区域为one# burst参数为10表示允许每个URL在突发情况下最多多发送10个请求。limit_req zoneone burst10; ...
}限流算法 nginx的限流算法使用了漏桶算法。当请求到达时会先检查对应的限流桶中的请求数量是否已经达到限制速率。如果未达到限制速率则允许请求通过并在限流桶中增加一个请求。如果达到限制速率则需要检查是否允许突发请求。 如果允许突发请求则允许请求通过并在限流桶中增加一个请求同时记录突发请求数如果不允许突发请求则直接拒绝请求。 .