Nginx
Nginx配置
# 进入nginx安装目录
$ cd /usr/local/nginx
# 配置nginx.conf
server {
listen 8000;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8001;
uwsgi_param UWSGI_SCRIPT CloudArchives.wsgi;
uwsgi_param UWSGI_CHDIR /var/web/CloudArchives;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
# 启动nginx(进入sbin目录)
$ ./nginx
# 重启nginx
$ ./nginx -s reload
uwsgi.ini配置
[uwsgi]
#使用nginx连接时使用
socket=127.0.0.1:8001
#直接做web服务器使用 python manage.py runserver ip:port
#http=127.0.0.1:8080
#项目目录
chdir=/var/web/CloudArchives
#项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=CloudArchives/wsgi.py
#指定启动的工作进程数
processes=4
#指定工作进程中的线程数
threads=2
master=True
#保存启动之后主进程的pid
pidfile=uwsgi.pid
#设置uwsgi后台运行,uwsgi.log保存日志信息
daemonize=uwsgi.log
#设置虚拟环境的路径
#virtualenv=/Users/smart/.virtualenvs/dailyfresh
# wusgi建立软连接
$ ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
# 启动uwsgi
$ uwsgi --ini uwsgi.ini
Nginx负载均衡
upstream backends {
server 172.16.179.130:10086;
server 172.16.179.130:10087;
server 172.16.179.130:10088;
}
server {
listen 8080;
server_name localhost;
location / {
proxy_pass http://backends;
}
}
单体架构优点
小团队成型即可完成-开发测试上线;
bug修复很快,迭代周期短,速度快。
单体架构面临的挑战
单体宕机造成所有服务不可用
耦合度高,迭代测试部署成本高 单节点并发能力有限
集群
计算机以群体形态构成整个系统
群体构成一个整体,不能独立存在
提高并发及可用性
降低单服务器压力
集群优势
提高系统性能;
提高系统可用性;
可扩展性高。
集群使用的注意点
用户会话
定时任务
内网互通
什么是nginx
高性能的http和反向代理web服务,也提供smtp服务。 主要功能反向代理
通过配置文件可以实现集群和负载均衡
静态资源虚拟化
常见的服务
ms iis asp.net
weblogic jboss 传统行业 erp/物流
tomcat jetty J2EE
apache nginx 静态服务反向代理
Nginx部署
Nginx软件部署
安装nginx
yum install nginx
查看nginx是否安装成功,存在版本说明安装成功
nginx -v
关闭nginx服务
service nginx stop
启动nginx服务
service nginx start
查看nginx服务
service ajx | grep nginx
nginx常用文件
配置文件目录
/etc/nginx
log日志目录
/var/log/nginx
首页目录
/usr/sjare/nginx/html
操作的配置文件目录
/etc/nginx/conf.d
#全局配置文件
/etc/nginx/nginx.conf
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3ZmjxBJJ-1652146188089)(file:///C:/Users/17580/AppData/Local/Packages/oice_16_974fa576_32c1d314_2bd7/AC/Temp/msohtmlclip1/01/clip_image002.jpg)]
nginx的使用
远程连接文件进行配置nginx配置文件
- 创建本地目录./nginx,将本地目录与远程目录进行关联。
- vscode 安装sftp
- 打开nginx目录,
- ctrl+shift+p
- 修改sftp.json文件信息,建立远程连接
- 在对应目录空白处右键,选择Download Folder下载远程服务器文件(需要在提示框输入密码哦) 可以直接vi 在服务器中修改
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OKtYBNC9-1652146188091)(file:///C:/Users/17580/AppData/Local/Packages/oice_16_974fa576_32c1d314_2bd7/AC/Temp/msohtmlclip1/01/clip_image002.jpg)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-994C1o39-1652146188092)(file:///C:/Users/17580/AppData/Local/Packages/oice_16_974fa576_32c1d314_2bd7/AC/Temp/msohtmlclip1/01/clip_image004.png)]
ps:ubuntu系统操作 1、切换root用户; 2、安装openssh-server;3、进入远程连接服务cd /etc/ssh; 4、修改sshd_config中permitrootlogin yes ,允许root用户登录; 5、重新启动ssh服务sudoserver ssh start。
全局配置段
user nginx; # 默认用户名 pid/run/nginx.pid # 指定进程号 worker_connections 1024; #指定最大连接数为1024
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vXJyHrxT-1652146188093)(file:///C:/Users/17580/AppData/Local/Packages/oice_16_974fa576_32c1d314_2bd7/AC/Temp/msohtmlclip1/01/clip_image002.jpg)]
http配置段
sendfile on; # 开启高效文件传输模式
tcp_nopush on; # 防止网络阻塞
tcp_nodelay on; # 防止网络阻塞
keepalive_timeout 65; # 长连接超时时间
types_hash_max_size 4096;
include /etc/nginx/mime.types; # 文件扩展名与文件类型映射表
default_type application/octet-stream; # 默认文件类型
access_log /var/log/nginx/access.log main; # log日志配置段
server配置段
include /etc/nginx/conf.d/*.conf; # 导入形式进行配置server配置段
server {
listen 80; # 监听80端口服务1(只写端口号)
listen 10.211.55.30; # 监听80端口服务
listen [::]:80; # 监听80端口服务
server_name _; # 当前监听服务的名字
location /{ # 指定的操作
root /etc/nginx/html; # 指定文件目录
index index.html; # 创建返回首页文件
}
}
通过location配置操作步骤:
-
创建主页面文件
-
添加server配置段,监听端口;
-
指定返回页面目录,指定匹配到的首页文件;
-
保存配置文件;
-
测试配置文件;
-
重新导入配置文件;
测试配置文件
nginx -t
重新导入配置文件
nginx -s reload
若重新启动nginx需要删除nginx.pid文件,停止nginx服务,再重新启动
非必要可不重启
通过配置文件配置http操作步骤
- 在conf.d文件夹中创建文件nginx.conf;
- 将server服务配置内容写入nginx.conf;
- 保存nginx.conf配置文件
location匹配规则优先级
server {
listen 80; # 监听80端口服务1(只写端口号)
listen [::]:80; # 监听80端口服务
server_name _; # 当前监听服务的名字
## 优先级最低
location /{
# 通用匹配
return 400;
}
## 优先级最高
location = /{
# 精确匹配
return 401;
}
location ~ /{
# 优先匹配
return 402;
}
}
try_files和return的使用及区别
try_files对根路径匹配无效
#try_files 在对根路径时是无法正常返回的,只能对子路径进行操作
# $uri 是请求文件的路径
# $uri/ 是请求目录的路径
location /a {
try_files $uri $uri/ =400;
}
location /a {
try_files $uri =401;
}
try_files配合@使用
locataion /b {
try_files $uri $uri/ @didi;
}
location @didi {
return 402;
}
return使用跳转
location /c {
return 302 http://www.baidu.com;
}
匹配路径后的斜杠问题
#location子路径后不加斜杠,请求地址加不加斜杠都可以请求到
location /d {
return 400;
}
#location子路径后加斜杠必须加斜杠才能匹配
location /e/ {
return 401;
}
root 和 alias 的使用和区别
-
root在指定根路径目录时若不定义index文件会查找默认index文件;
-
root在指定子路径目录时若不定义index文件无法默认使用index;
-
alias 在指定跟路径目录时若目录后不加斜杠,无法默认使用index文件,若增加斜杠会默认使用index.html文件;
4.alias在指定子路径目录时目录后加不加斜杠,都可以默认使用index文件
# root
location / {
# 未指定index文件不写index时也会加载index文件
root /etc/nginx/html;
# 默认加载index.html
index index8000.html;
}
# alias
location / {
# 目录后不增加斜杠不会默认使用index.html
alias /etc/nginx/html/;
}
访问控制
location / {
stub_status on; #返回nginx状态信息
allow 121.239.108.8; # 指定哪个ip的客户端访问
deny all; # 除了允许的其他都拒绝
}
目录下载控制
location /download {
alias /etc/nginx;
# 开启目录下载服务自动下载
autoindex on;
}
什么是正向代理
客户端和目标服务器之间的一个代理服务器 (代理客户端,将客户端信息隐藏)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aROklnlu-1652146188094)(file:///C:/Users/17580/AppData/Local/Packages/oice_16_974fa576_32c1d314_2bd7/AC/Temp/msohtmlclip1/01/clip_image002.png)]
什么是反向代理
客户在请求目标服务器,由代理服务器决定访问哪个ip(代理服务器,隐藏服务器端信息)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YAH0l0GX-1652146188095)(file:///C:/Users/17580/AppData/Local/Packages/oice_16_974fa576_32c1d314_2bd7/AC/Temp/msohtmlclip1/01/clip_image004.png)]
反向代理
例子: 客户端访问80的时候,nginx由80转发给8000端口,代理服务器监听80端口,收到请求转发给8000端口。
# 反向代理使用
server{
listen 80;
listen [::]:80;
location / {
# 当客户端访问80端口时,通过代理转发给8006端口
proxy_pass http://121.43.39.107:8006;
}
}
server{
listen 8006;
listen [::]:8006;
location / {
# 监听8000端口,返回对应的主页面
root /etc/nginx/html;
index index8000.html;
}
}
负载均衡使用
# 负载均衡(轮询形式)
upstream jiaohuaoqing{
server 121.43.39.107:8006;
server 121.43.39.107:8007;
server 121.43.39.107:8008;
}
server{
listen 80;
listen [::]:80;
location / {
# 反向代理使用
# 当客户端访问80端口时,通过代理转发给负载均衡对应的端口
proxy_pass http://jiaohuaoqing;
allow 121.239.108.8; # 指定哪个ip的客户端访问
deny all;
}
}
server{
listen 8006;
listen [::]:8006;
location / {
# 监听8006端口,返回对应的主页面
root /etc/nginx/html;
index index8000.html;
}
}
server{
listen 8007;
listen [::]:8007;
location / {
# 监听8007端口,返回对应的主页面
root /etc/nginx/html;
index 8007.html;
}
}
server{
listen 8008;
listen [::]:8008;
location / {
# 监听8008端口,返回对应的主页面
root /etc/nginx/html;
index 8008.html;
}
}
负载均衡调度算法,常用的
- 轮询
- 加权轮询
- ip_hash 第一次请求会分配一个服务端的ip,以后的所有请求都会使用第一次的服务ip。
# 轮询
upstream jiaohuaoqing{
# 默认为轮询调度算法
server 121.43.39.107:8006;
server 121.43.39.107:8007;
server 121.43.39.107:8008;
}
# 加权轮询
upstream jiaohuaoqing{
# 默认为轮询调度算法
# server 121.43.39.107:8006;
# server 121.43.39.107:8007;
# server 121.43.39.107:8008;
# 加权轮询,权重越大越多调度
server 121.43.39.107:8006 weight=1;
server 121.43.39.107:8007 weight=2;
server 121.43.39.107:8008 weight=3;
}
# ip_hash 算法
# 负载均衡
upstream jiaohuaoqing{
# ip_hash 算法
ip_hash;
server 121.43.39.107:8006;
server 121.43.39.107:8007;
server 121.43.39.107:8008;
}
日志定制操作
# 默认的日志格式 shell格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# 设置日志输出格式
log_format proxy_log '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_real_ip" "$http_x_forwarded_for"';
server{
listen 80;
listen [::]:80;
location / {
# 反向代理使用
# 当客户端访问80端口时,通过代理转发给8006端口
# proxy_pass http://121.43.39.107:8006;
proxy_pass http://jiaohuaoqing;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header x-Forwarded-For $proxy_add_x_forwarded_for;
allow 121.239.108.8; # 指定哪个ip的客户端访问
deny all;
}
}
server{
listen 8006;
listen [::]:8006;
access_log /var/log/nginx/app1/access.log proxy_log; #使用新的格式
real_ip_header X-Forwarded-For; #获取真实IP地址
real_ip_recursive on; #开启获取真实IP地址服务
location / {
# 监听8006端口,返回对应的主页面
root /etc/nginx/html;
index index8000.html;
}
}
proxy_pass http://jiaohuaoqing;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header x-Forwarded-For $proxy_add_x_forwarded_for;
allow 121.239.108.8; # 指定哪个ip的客户端访问
deny all;
}
}
server{
listen 8006;
listen [::]:8006;
access_log /var/log/nginx/app1/access.log proxy_log; #使用新的格式
real_ip_header X-Forwarded-For; #获取真实IP地址
real_ip_recursive on; #开启获取真实IP地址服务
location / {
# 监听8006端口,返回对应的主页面
root /etc/nginx/html;
index index8000.html;
}
}