nginx简介
nginx 是什么?用来干嘛的
通俗解释:客户端向服务器请求时,提供让多个服务器一起处理请求的东西
是一个反向代理服务器,能够提供负载均衡,和进行反向代理的功能
正向代理&反向代理
客户端向代理服务器请求,代理服务器帮忙去云端拿数据(因为客户端无法直接访问服务器)
隐藏客户端ip,提升访问速度
代理服务接受客户端的请求,而不是让外部直接连接到server
隐藏服务器ip,服务器负载均衡
Nginx提供的负载均衡策略有2种:内置策略和扩展策略。
内置策略为轮询,加权轮询,Ip hash。
扩展策略,就天马行空,只有你想不到的没有他做不到的。
动静分离,在我们的软件开发中,有些请求是需要后台处理的,有些请求是不需要经过后台处理的(如:css、html、jpg、js等等文件),这些不需要经过后台处理的文件称为静态文件。让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作。提高资源响应的速度。
iphash:iphash对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。
(一般用redis解决session共享的问题,因为服务器挂了session就没了)
nginx安装与配置
官网地址 nginx: download
windows
下载,双击运行
浏览器输入localhost,有下面的页面说明启动成功了
linux(Debian/Ubuntu)
- 使用预先构建的二进制文件: 这种方法是最简单和快速的方法。
- 从源代码构建: 此方法可以自定义需要的第三方模块,这些模块使 Nginx 更加强大。
方式一
sudo apt-get update
sudo apt-get install nginx
ps -ef | grep nginx
sudo ufw allow 'Nginx Full'
systemctl status nginx
service nginx status
方式二
参考:
基于Ubuntu系统Nginx的两种安装方式_ubuntu安装nginx-CSDN博客
官网下载,或者选择版本,赋值url
wget http://nginx.org/download/nginx-1.25.2.tar.gztar -xvf nginx-1.25.2.tar.gzapt-get install -y gcc
sudo apt-get install -y gcc
sudo apt-get install -y libpcre3 libpcre3-dev
sudo apt-get install -y zlib1g zlib1g-dve
sudo apt-get install -y zlib1g zlib1g-dev
sudo apt-get install -y ipenssl
sudo apt-get install -y openssl
sudo apt-get install -y libssl-dev
./configure
makemake install现在只能 /usr/local/nginx/sbin/nginx
或者 /usr/local/nginx/sbin/nginx -s reload stop 这种用法建立软连接 前面是解压的目录 后面是shell命令的目录,加了后就能 sudo nginx来用sudo ln -s /usr/local/nginx/sbin/nginx /usr/bin/
注意:
./configure可以指定 安装的nginx的配置文件和可执行程序的路径
若没有指定有默认值(例如配置文件读的是/usr/local/nginx/conf/nginx.conf)
而不是源代码路径下的
--prefix:指定最终安装到的目录 默认值 /usr/local/ngnix--sbin-path:用来指定可执行文件目录:默认的是 sbin/nginx--conf-path:用来指定配置文件目录:默认的是 conf/nginx.conf
nginx使用
windows下:如果要用命令行需要先把 nginx 安装目录添加到环境变量 Path 中,避免找不到路径,开始右键-》系统-》高级系统设置-》环境变量
Nginx常用命令
cd /usr/local/nginx/sbin/
./nginx 启动
./nginx -s stop 停止
./nginx -s quit 安全退出
./nginx -s reload 重新加载配置文件
ps aux|grep nginx 查看nginx进程
问题查询会使用的命令
# 开启
service firewalld start
# 重启
service firewalld restart
# 关闭
service firewalld stop
# 查看防火墙规则
firewall-cmd --list-all
# 查询端口是否开放
firewall-cmd --query-port=8080/tcp
# 开放80端口
firewall-cmd --permanent --add-port=80/tcp
# 移除端口
firewall-cmd --permanent --remove-port=8080/tcp
#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload
# 参数解释
1、firwall-cmd:是Linux提供的操作firewall的一个工具;
2、--permanent:表示设置为持久;
3、--add-port:标识添加的端口;
nginx核心学习
详解Nginx的核心原理 - 哔哩哔哩
https://www.cnblogs.com/firstdream/p/6728290.html
nginx实践实例
1,nginx配置文件
# 这行设置了Nginx的工作进程数为1。工作进程是处理请求的线程。
worker_processes 1; # 这个块定义了Nginx的事件处理设置
events {# 这行设置了每个工作进程的最大连接数为1024worker_connections 1024;
}# 这个块定义了HTTP服务器的设置
http {include mime.types;default_type application/octet-stream;sendfile on;#tcp_nopush on;#keepalive_timeout 0;keepalive_timeout 65;# 这个块定义了一个上游服务器组,名为liao。它有两个服务器,# 一个是localhost:8000,权重为1;另一个是localhost:8001,权重为2。# 权重决定了处理请求的优先级。upstream liao {server localhost:8000 weight = 1;server localhost:8001 weight = 2;}# 这个块定义了一个HTTP服务器。server {listen 80;server_name localhost;# 这个块定义了根目录下的文件和目录的请求处理方式。location / {root html;index index.html index.htm;# 这行将请求代理到上游服务器组liaoproxy_pass http://liao;}# 当发生500、502、503或504错误时,Nginx会返回位于根目录下的50x.html文件error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}}
}
2,python服务器代码demo
运行起来后,8000端口有请求就会返回消息并打印日志
from http.server import BaseHTTPRequestHandler, HTTPServer count = 1# 自定义的请求处理类
class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):def do_GET(self): # 打印请求内容 # print(f"Request URL: {self.path}") # print(f"Headers: {self.headers}") # 发送响应状态码和响应头 self.send_response(200) self.send_header('Content-type', 'text/html') self.end_headers()print("get")global countcount += 1print(count, 8000)# 发送响应体 response_message = "Hello, World!" self.wfile.write(response_message.encode())def do_POST(self):# 发送响应状态码和响应头 self.send_response(200) self.send_header('Content-type', 'text/html') self.end_headers()print("POST")global countcount += 1print(count, 8001)# 发送响应体 response_message = "Hello, World!" self.wfile.write(response_message.encode())# 创建服务器对象并绑定地址和端口号
server = HTTPServer(('localhost', 8000), SimpleHTTPRequestHandler)
print('Server started http://localhost:8000')
参考了很多资料,如有侵权,联系删除