<架构师必修课>-nginx
2021/10/5 7:14:41
本文主要是介绍<架构师必修课>-nginx,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 1 nginx简介
- 2 nginx主要功能概述
- 2.1 正向代理与反向代理
- 2.1.1 正向代理
- 2.1.2 反向代理
- 2.2 负载均衡
- 2.3 动静分离
- 3 nginx常用命令
- 4 nginx配置文件
- 4.1 配置文件位置
- 4.2 配置文件的组成
- 4.2.1 全局块
- 4.2.2 events块
- 4.2.3 http块
- 4.2.3.1 http全局块
- 4.2.3.2 server块
- 4.2.3.2.1 全局server
- 4.2.3.2.2 location
- 5 nginx反向代理配置实战
- 5.1 最简单的方向代理
- 5.2 不同url分发到不同服务器
- 6 nginx负载均衡配置实战
- 6.1 轮询
- 6.2 权重
- 6.3 ip_hash
- 6.4 fair
- 7 nginx动静分离配置实战
- 7.1 准备静态资源
- 7.2 修改配置文件
- 8 nginx配置高可用集群
- 8 nginx原理
环境介绍:
Ubantu 20.04
nginx 18.1
如果你的ubantu没有安装nginx,那么使用下面的命令安装:
sudo apt install nginx
稍等片刻,检查是否安装成功
zjf@ubuntu:~/Desktop$ nginx -v nginx version: nginx/1.18.0 (Ubuntu) # 有输出版本号说明安装成功 zjf@ubuntu:~/Desktop$ systemctl status nginx ● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset:> Active: active (running) since Sun 2021-10-03 19:22:12 CST; 49min ago Docs: man:nginx(8) Main PID: 6749 (nginx) Tasks: 3 (limit: 9443) Memory: 3.7M CGroup: /system.slice/nginx.service ├─6749 nginx: master process /usr/sbin/nginx -g daemon on; master_> ├─6750 nginx: worker process └─6751 nginx: worker process
1 nginx简介
nginx是C语言写的web服务器,占用内存小,占用内存小,具有高并发,高可靠性,常用功能主要有:反向代理;动静分离;负载均衡
2 nginx主要功能概述
2.1 正向代理与反向代理
2.1.1 正向代理
在客户端配置代理服务器,通过代理服务器与实际服务器进行通讯
2.1.2 反向代理
客户端对代理是无感知的,客户端不需要做任何配置都可以访问,将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器是一个服务器,暴露的是代理服务器,隐藏的是真实服务器。
2.2 负载均衡
当单台服务器达到性能瓶颈的时候,需要增加多台服务器,负载均衡顾名思义就是把请求平均分发到不同的服务器。
2.3 动静分离
为了加快网站的解析速度,把动态页面和静态页面由不同的服务器来解析,加快解析速度,降低单个服务器的压力
3 nginx常用命令
切换到/usr/sbin目录。可以使用nginx命令
zjf@ubuntu:~/Desktop$ whereis nginx nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx /usr/share/man/man8/nginx.8.gz zjf@ubuntu:~/Desktop$ cd /usr/sbin/
查看版本号
zjf@ubuntu:/usr/sbin$ ./nginx -v nginx version: nginx/1.18.0 (Ubuntu)
停止nginx
zjf@ubuntu:/usr/sbin$ ./nginx -s stop
启动nginx
zjf@ubuntu:/usr/sbin$ ./nginx
重新加载配置文件
zjf@ubuntu:/usr/sbin$ ./nginx -s reload
如果权限不够,再指令前面加sudo。
这不是操作nginx的唯一方式,可以通过docker使用nginx,也可以通过systemctl 操作nginx服务
检查配置文件
root@ubuntu:/usr/sbin# nginx -tc /etc/nginx/nginx.conf nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
使用指定配置文件
nginx -c /etc/nginx/nginx.conf
使用指定配置文件重新启动
nginx -s reload -c /etc/nginx/nginx.conf
4 nginx配置文件
4.1 配置文件位置
nginx的配置文件再/etc/nginx目录下
zjf@ubuntu:~$ whereis nginx nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx /usr/share/man/man8/nginx.8.gz zjf@ubuntu:~$ cd /etc/nginx zjf@ubuntu:/etc/nginx$ ls conf.d koi-win nginx.conf sites-enabled fastcgi.conf mime.types proxy_params snippets fastcgi_params modules-available scgi_params uwsgi_params koi-utf modules-enabled sites-available win-utf
4.2 配置文件的组成
4.2.1 全局块
设置影响nginx服务器整体运行的配置指令,主要包括配置运行nginx服务器的用户(组)、允许生成的worker process数,进程PID存放路径、日志存放路径和类型以及配置文件的引入等。
user www-data; worker_processes auto; # nginx并发处理的值,越大处理的并发越多 pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf;
4.2.2 events块
events块涉及的指令主要影响nginx与用户的网络链接
events { worker_connections 768; # 每个process允许的链接数 # multi_accept on; }
4.2.3 http块
这里是nginx配置最频繁的部分,代理,缓存和日志定义等绝大多数功能和第三方模块的配置都在这里,http块也包括http全局块、server块
4.2.3.1 http全局块
http {
include mime_type;
}
4.2.3.2 server块
4.2.3.2.1 全局server
sever { listen 80;# 当前监听的端口是80 server_name localhost; # 主机名称 }
4.2.3.2.2 location
location / { # 当请求的路径出现斜杠出现下面的跳转,可以做路径中包含某个值,执行其他跳转 root html index index.html index.htm }
5 nginx反向代理配置实战
5.1 最简单的方向代理
浏览器访问192.168.153.128:81请求就会被重定向到百度首页
http{ # http全局块-其他内容 server { listen 81; server_name 192.168.153.128; location ~/* { proxy_pass http://www.baidu.com; } } # http其他内容 }
5.2 不同url分发到不同服务器
请求中有淘宝发送到www.taobao.com
请求中有百度发送到www.baidu.com
server { listen 81; server_name 192.168.153.128; location ~/baidu/* { proxy_pass http://www.baidu.com; } location ~/taobao/* { proxy_pass http://www.taobao.com; } }
6 nginx负载均衡配置实战
nginx负载均衡常用的四种策略,分别是轮询(默认策略)、权重、ip_hash,fair(响应时间方式)
做配置之前先准备两个服务,如果你是java开发,那么建议启动两个tomcat服务,本篇文件使用python的web服务,flask+gunicorn做为服务
首先准备两个flask程序
app1.py
from flask import Flask app = Flask(__name__) @app.route('/') def index(): return "Hello gunicorn web 1; open 5000 port"
第二个flask程序
app2.py
from flask import Flask app = Flask(__name__) @app.route('/') def index(): return "Hello gunicorn web 2; open 5001 port"
使用gunicorn 运行服务
gunicorn -w 2 -b 0.0.0.0:5000 -D app1:app gunicorn -w 2 -b 0.0.0.0:5001 -D app2:app
通过浏览器访问ip:5000 和 ip:5001会看到定义的返回值
6.1 轮询
upstream myserver { server 192.168.153.128:5000; server 192.168.153.128:5001; } server { listen 81; server_name 192.168.153.128; location ~/* { proxy_pass http://myserver; } }
访问192.168.153.128:81会依次代理到5000端口与5001端口
6.2 权重
upstream myserver { server 192.168.153.128:5000 weight=5; server 192.168.153.128:5001 weight=10; } server { listen 81; server_name 192.168.153.128; location ~/* { proxy_pass http://myserver; } }
访问192.168.153.128:81 代理到5000端口 5001端口,平均下:5001端口被访问两次,5000端口被访问一次
6.3 ip_hash
upstream myserver { ip_hash; server 192.168.153.128:5000; server 192.168.153.128:5001; } server { listen 81; server_name 192.168.153.128; location ~/* { proxy_pass http://myserver; } }
根据访问的ip访问到不同的服务器,可以解决session共享问题
6.4 fair
upstream myserver { server 192.168.153.128:5000; server 192.168.153.128:5001; fair; } server { listen 81; server_name 192.168.153.128; location ~/* { proxy_pass http://myserver; } }
7 nginx动静分离配置实战
7.1 准备静态资源
在/home/zjf/Desktop/test目录下创建一个image文件夹放一些图片
7.2 修改配置文件
server { listen 81; server_name 192.168.153.128; location /image/ { root /home/zjf/Desktop/test/; # 指向静态目录 autoindex on; # 显示文件夹内的文件 } }
实现了动静分离
8 nginx配置高可用集群
需要两台服务器
每台服务器需要keepalived
yum 命令安装keepalived: yum install keepalived -y
8 nginx原理
nginx有一个master进程和一个worker进程
root@ubuntu:/home/zjf/Desktop/test# ps -ef |grep nginx root 6385 1501 0 08:58 ? 00:00:00 nginx: master process nginx -c /etc/nginx/nginx.conf www-data 11000 6385 0 10:15 ? 00:00:00 nginx: worker process
master负责管理与监控,一个master管理多个worker,客户端发送请求先到达master,多个worker使用争抢策略获取请求并处理,每个worker是一个单独的进程
这篇关于<架构师必修课>-nginx的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-13用Nginx防范DDoS攻击的那些事儿
- 2024-12-13用Terraform在AWS上搭建简单NGINX服务器指南
- 2024-10-29Nginx发布学习:从入门到实践的简单教程
- 2024-10-28Nginx发布:新手入门教程
- 2024-10-21nginx 怎么设置文件上传最大20M限制-icode9专业技术文章分享
- 2024-10-17关闭 nginx的命令是什么?-icode9专业技术文章分享
- 2024-09-17Nginx实用篇:实现负载均衡、限流与动静分离
- 2024-08-21宝塔nginx新增8022端口方法步骤-icode9专业技术文章分享
- 2024-08-21nginx配置,让ws升级为wss访问的方法步骤-icode9专业技术文章分享
- 2024-08-15nginx ws代理配置方法步骤-icode9专业技术文章分享