首页 / NGINX / Nginx-Nginx原理到配置
Nginx-Nginx原理到配置
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Nginx-Nginx原理到配置,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4244字,纯文字阅读大概需要7分钟。
内容图文
![Nginx-Nginx原理到配置](/upload/InfoBanner/zyjiaocheng/927/7cafa95846ee4e429d5c9f97b3077893.jpg)
原理
Nginx为什么那么快
Nginx采用多进程+epoll的方式对请求进行处理,每一个请求就是对socket时间的读写,相比传统的阻塞IO,epoll通过IO多路复用的方式,在同一个线程中高效的完成读写操作,相比多线程减少了线程间切换的消耗,极大地提升了效率。
Nginx请求流程
- 初始化
- 请求解析
- 请求处理
- 数据过滤
- 返回
Master和Worker的关系
Master进程Fork出Worker进程,Master进程不参与请求的处理,只有Worker进程参与,Master进程只负责任务的分发、Worker进程状态监控。
Worker进程数通常在nginx.conf文件中配置,默认为cpu数
使用
1. 反向代理
http {
server {
listen 80; # 监听80端口
location / { # 正则表达式匹配路由
proxy_pass http://real_server; # 请求转发
}
}
}
负载均衡
http {
......
upstream real_server {
server 192.168.103.100:2001 weight=1 max_fails=2 fail_timeout=60s;;#轮询服务器和访问权重
server 192.168.103.100:2002 weight=2 max_fails=2 fail_timeout=60s;;
}
server {
listen 80;
location / {
proxy_pass http://real_server;
}
}
fail_timeout时间内失败了max_fails次请求后,则认为该上游服务器不可用,然后将该服务地
址踢除掉。fail_timeout时间后会再次将该服务器加入存活列表,进行重试
黑名单
http {
server {
listen 80; # 监听80端口
location / { # 正则表达式匹配路由
proxy_pass http://real_server; # 请求转发
deny 192.168.1.1; # 拒绝访问
allow 10.1.1.0/16; # 通过
}
}
}
方案2: 通过lua脚本+redis可以实现动态添加
限流
geo $limit {
default
1;192.168.2.0/24
0;
}
map $limit $limit_key {
1 $binary_remote_addr;
0 "";
}
limit_req_zone $limit_key zone=mylimit:100m rate=10r/s;
location / {
limit_req zone=mylimit burst=1 nodelay;
proxy_pass http://real_server;
}
每秒最大10个请求
排队大小为1
缓存
- 静态资源缓存
location ~*.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 2d;
}
解决跨域
跨域原因:
出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本
的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源
策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另
外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),
主机(host)和端口号(port)
server {
location / {
root html;
index index.html index.htm;
//允许cros跨域访问
add_header 'Access-Control-Allow-Origin' '*';
}
//自定义本地路径
location /apis {
rewrite ^.+apis/?(.*)$ /$1 break;
include uwsgi_params;
proxy_pass http://www.binghe.com;
}
}
四层负载均衡
四层负载均衡和七层负载均衡的区别:四层是在OSI模型第四层就开始进行负载均衡,如针对TCP协议,七层则根据应用,如HTTP应用
- 静态负载均衡
通过ngx_stream_core_module模块来完成
stream {
upstream mysql_backend {
server 192.168.175.100:3306 max_fails=2 fail_timeout=10s weight=1;
least_conn;
}
server {
#监听端口,默认使用的是tcp协议,如果需要UDP协议,则配置成listen 3307 udp;
listen 3307;
#失败重试
proxy_next_upstream on;
proxy_next_upstream_timeout 0;
proxy_next_upstream_tries 0;
#超时配置
#配置与上游服务器连接超时时间,默认60s
proxy_connect_timeout 1s;
#配置与客户端上游服务器连接的两次成功读/写操作的超时时间,如果超时,将自动断开连接
#即连接存活时间,通过它可以释放不活跃的连接,默认10分钟
proxy_timeout 1m;
#限速配置
#从客户端读数据的速率,单位为每秒字节数,默认为0,不限速
proxy_upload_rate 0;
#从上游服务器读数据的速率,单位为每秒字节数,默认为0,不限速
proxy_download_rate 0;
#上游服务器
proxy_pass mysql_backend;
}
}
- 动态负载均衡
使用nginx-upsync-module模块
stream {
upstream mysql_backend {
server 127.0.0.1:1111;
#占位server
upsync 192.168.175.100:8500/v1/kv/upstreams/mysql_backend
upsync_timeout=6m upsync_interval=500ms upsync_type=consul
strong_dependency=off;
upsync_dump_path /usr/local/nginx-1.17.2/conf/mysql_backend.conf;
}
server {
#监听端口,默认使用的是tcp协议,如果需要UDP协议,则配置成listen 3307 udp;
listen 3307;
#失败重试
proxy_next_upstream on;
proxy_next_upstream_timeout 0;
proxy_next_upstream_tries 0;
#超时配置
#配置与上游服务器连接超时时间,默认60s
proxy_connect_timeout 1s;
#配置与客户端上游服务器连接的两次成功读/写操作的超时时间,如果超时,将自动断开连接
#即连接存活时间,通过它可以释放不活跃的连接,默认10分钟
proxy_timeout 1m;
#限速配置
#从客户端读数据的速率,单位为每秒字节数,默认为0,不限速
proxy_upload_rate 0;
#从上游服务器读数据的速率,单位为每秒字节数,默认为0,不限速
proxy_download_rate 0;
#上游服务器
proxy_pass mysql_backend;
}
server {
listen 13307;
upstream_show;
}
}
Nginx优化配置
- 在nginx.conf中调整Worker数
- 调整最大连接数
vim /etc/security/limits.conf- soft nofile 655360
- hard nofile 655360
内容总结
以上是互联网集市为您收集整理的Nginx-Nginx原理到配置全部内容,希望文章能够帮你解决Nginx-Nginx原理到配置所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。