提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言Docker安装Nginx1.下载镜像2.创建挂载目录3.运行容器并从容器中复制要挂载的文件4.停止、删除容器5.创建并运行容器6.查看Nginx是否部署成功
Nginx的配置nginx配置文件的主要组成部分1.全局块2.event块3.http块3.1http全局块限制文件上传大小
3.2server块3.2.1server全局块3.2.2location块
upstream 负载均衡配置1. 轮询策略 就是依次分发执行2. Ip hash算法3. 加权轮询策略
总结
前言
部署系统少不了反向代理,这次我们用的反向代理的工具是nginx。nginx优点是非阻塞、高并发连接:官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数。接下来就讲解一下nginx的安装和配置路由转发。
Docker安装Nginx
1.下载镜像
docker pull nginx:1.25.0
如果是国产服务器麒麟V10,可以下载arrch64/v8的镜像
网站链接
docker pull nginx:1.25.0@sha256:f2ab27de75f97311b87e6287a14fad819302070a62f9b946ccf45e1fc6a508af
2.创建挂载目录
mkdir -p /home/nginx/docker-nginx
3.运行容器并从容器中复制要挂载的文件
docker run --name nginx -p 80:80 -d nginx:1.25.0
docker cp nginx:/etc/nginx/nginx.conf /home/nginx/docker-nginx/
docker cp nginx:/etc/nginx/conf.d/ /home/nginx/docker-nginx/conf/
docker cp nginx:/usr/share/nginx/html/ /home/nginx/docker-nginx/html/
docker cp nginx:/var/log/nginx/ /home/nginx/docker-nginx/logs/
4.停止、删除容器
docker stop nginx
docker rm nginx
5.创建并运行容器
docker run -p 80:80 \
-v /home/nginx/docker-nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /home/nginx/docker-nginx/logs:/var/log/nginx \
-v /home/nginx/docker-nginx/html:/usr/share/nginx/html \
-v /home/nginx/docker-nginx/conf:/etc/nginx/conf.d \
-v /etc/localtime:/etc/localtime \
--name nginx \
--restart=always \
-d nginx:1.25.0
6.查看Nginx是否部署成功
curl localhost:80
Nginx的配置
nginx配置文件的主要组成部分
全局块events块http块
1.全局块
就是配置文件从头开始到events块之间的内容,主要设置的是影响nginx服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等, 比如上面第一行配置的:
worker_processes 1;
此处可以优化配置: worker 进程数应该设置为服务器 CPU 的核数。
grep -c processor /proc/cpuinfo # 查看CPU核数
worker_processes 2; # 2核CPU的配置
worker_cpu_affinity 01 10;
worker_processes 4; # 4核CPU的配置
worker_cpu_affinity 0001 0010 0100 1000;
worker_processes 8; # 8核CPU的配置
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 1000000;
2.event块
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。
events {
worker_connections 1024;
}
上述例子就表示每个 work process 支持的最大连接数为 1024.
优化最大连接数可以看链接: 优化 Nginx 单个进程允许的最大连接数
3.http块
包括http全局块,以及多个server块
3.1http全局块
http 全局块配置的指令包括文件引入、 MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
限制文件上传大小
lient_max_body_size 用于设置最大的允许客户端请求主体的大小。
在请求头中有 “Content-Length” ,如果超过了此配置项,客户端会收到 413 错误,即请求的条目过大。
http {
client_max_body_size 100m; # 设置客户端最大的请求主体大小为 100 M
}
3.2server块
这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。 每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机 而每个 server 块也分为全局 server 块,以及可以同时包含多个 location 块。
3.2.1server全局块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。
server {
listen 80;
listen [::]:80;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
}
3.2.2location块
一个 server 块可以配置多个 location 块。 主要作用是根据请求地址路径的匹配,匹配成功进行特定的处理 这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
location / {
root /usr/share/nginx/html;
index index.html index.htm;
client_max_body_size 1g;
}
location /zhongshan.ui.wechat/ {
proxy_pass http://192.168.0.101:8080/zhongshan.ui.wechat/;
client_max_body_size 100m;
}
此项目的的全局块、event块为一体,将server块分离开来,便于我们编写查阅。 Server块在这边 此处可以编写多个conf,暴露出多个端口。
nginx.conf文件是如下:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
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;
keepalive_timeout 65;
client_max_body_size 1g;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
default.conf文件如下:
server {
listen 80;
listen [::]:80;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
client_max_body_size 1g;
}
location /zhongshan.ui.wechat/ {
proxy_pass http://192.168.0.101:8080/zhongshan.ui.wechat/;
client_max_body_size 100m;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/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 Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
upstream 负载均衡配置
这一块单独拎出来,因为涉及到服务器集群进行负载均衡的配置。 Nginx提供的负载均衡策略有2种:内置策略和扩展策略。 内置策略为轮询(默认),加权轮询,Ip hash。 扩展策略: URL_HASH(第三方) 和 FAIR(第三方)
轮询策略Ip hash算法加权轮询策略
1. 轮询策略 就是依次分发执行
upstream name {
server 192.168.1.100:8000;
server 192.168.1.101:8000;
}
2. Ip hash算法
在使用ip_hash方式处理负载均衡时,Web服务器的状态可以使用down(表示当前的server暂时不参与负载均衡),但是不能使用weight(权重)和backup(预留的备份机器)。
upstream name {
ip_hash;
server 192.168.1.100:8000;
server 192.168.1.101:8000;
}
3. 加权轮询策略
在配置中,weigth参数表示权值,权值越高则被分配到的概率越大。除此之外,还可以设定每台Web服务器在负载均衡调度中的状态,常用的参数:max_fails允许请求失败的次数默认为l、fail_timeoutq请求失败后暂停服务的时间、backup预留的备份机器、down表示当前的server暂时不参与负载均衡。
#配置负载均衡服务器组名称、地址、权重
upstream web_server {
#weigrt权重值(越大访问率大),在fail_timeout时间内检查后端服务器max_fails次,失败则被剔除;
server 192.168.1.123 weight=1 fail_timeout=30s max_fails=2;
server 192.168.1.91 weight=1 fail_timeout=30s max_fails=2;
}
总结
以上就是nginx的安装和配置的总结啦,希望对你有用。后续将讲解一下数据的安装配置。
精彩内容
发表评论