网站推广平台,游戏创业项目,asp企业网站设计,餐饮小店面装修设计项目中经常使用nginx做负载均衡#xff0c;接口路由、文件、文档的上传及下载、视频的代理播放等等#xff0c;都离不开nginx的支持#xff0c;今天我们分享一下其个使用场景。
1、配置文件 nd-nginx.conf
全局配置 #全局配置端#xff0c;对全局生效#xff0c;主要设置…项目中经常使用nginx做负载均衡接口路由、文件、文档的上传及下载、视频的代理播放等等都离不开nginx的支持今天我们分享一下其个使用场景。
1、配置文件 nd-nginx.conf
全局配置 #全局配置端对全局生效主要设置nginx的启动用户/组启动的工作进程数量工作模式Nginx的PID路径日志路径等。
#user nobody;
#user nginx nginx;#启动Nginx工作进程的用户和组
worker_processes 1; #启动工作进程数数量
#worker_processes [number | auto]; #启动Nginx工作进程的数量,一般设为和CPU核心数相同
#worker_cpu_affinity 00000001 00000010 00000100 00001000 | auto ;
#将Nginx工作进程绑定到指定的CPU核心默认Nginx是不进行进程绑定的绑定并不是意味着当前nginx进程独占以一核心CPU
#但是可以保证此进程不会运行在其他核心上这就极大减少了nginx的工作进程在不同的cpu核心上的来回跳转
#减少了CPU对进程的资源分配与回收以及内存管理等因此可以有效的提升nginx服务器的性能。#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;#pid logs/nginx.pid;#events设置快主要影响nginx服务器与用户的网络连接比如是否允许同时接受多个网络连接
#使用哪种事件驱动模型处理请求每个工作进程可以同时支持的最大连接数是否开启对多工作进程下的网络连接进行序列化等。
events {#设置单个nginx工作进程可以接受的最大并发作为web服务器的时候最大并发数为worker_connections * worker_processes#作为反向代理的时候为(worker_connections * worker_processes)/2worker_connections 1024;
}
文件上面全局配置
2、http 模块详解
#http块是Nginx服务器配置中的重要部分缓存、代理和日志格式定义等绝大多数功能和第三方模块都可以在这设置
#http块可以包含多个server块而一个server块中又可以包含多个location块
#server块可以配置文件引入、MIME-Type定义、日志自定义、是否启用sendfile、连接超时时间和单个链接的请求上限等。
http {#通用配置....# N个server 模块虚拟服务器 }
3、http模块里面通用的配置 include mime.types; #导入支持的文件类型,是相对于/apps/nginx/conf的目录在响应报文中将指定的文件扩展名映射至MIME对应的类型default_type application/octet-stream; #除mime.types中文件类型外,设置其它文件默认类型访问其它类型时会提示下载不匹配的类型文件#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 logs/access.log main;#作为web服务器的时候打开sendfile加快静态文件传输指定是否使用sendfile系统调用来传输文件,#sendfile系统调用在两个文件描述符之间直接传递数据(完全在内核中操作)从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝#操作效率很高被称之为零拷贝硬盘 kernel buffer (快速拷贝到kernelsocket buffer) 协议栈。sendfile on;#tcp_nopush on;#keepalive_timeout 0;keepalive_timeout 65; #长连接超时时间单位是秒#开启gzip压缩若想关闭gzip压缩则需要注释掉这句话或者将on换成off#gzip on;#配置允许压缩的页面的最小字节数页面字节数从header头中的Content-Length中获取建议设置成1k因为如果数据小于1k他也会压缩成1k这样会起到反作用。#gzip_min_length 1k;#4个16k的数据流用于存储gzip的压缩结果数据流#gzip_buffers 4 16k;#支持的http版本为1.1#gzip_http_version 1.1;#判断客户端是否支持gzip技术若不支持则不会进行gzip处理#gzip_vary on;# 全局跨域配置#为 * 表示服务器可以接受所有的请求源Origin即接受所有跨域的请求也可以指定一个确定的URLadd_header Access-Control-Allow-Origin * always;#可选字段为true表示允许发送Cookie。同时发送时必须设置XMLHttpRequest.withCredentials为true才有效请求若服务器不允许浏览器发送删除该字段即可。add_header Access-Control-Allow-Credentials true;#代表允许使用指定的方法请求该地址add_header Access-Control-Allow-Methods GET, POST, PATCH, DELETE, PUT, OPTIONS;#代表允许在请求该地址的时候带上指定的请求头例如Content-TypeAuthorization使用逗号,拼接起来放在双引号中add_header Access-Control-Allow-Headers DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type, X-Custom-Header, Access-Control-Expose-Headers, Token, Authorization;add_header Access-Control-Allow-Headers *;#代表着在 1728000 秒之内不用请求该地址的时候 不需要再进行预检请求也就是跨域缓存。add_header Access-Control-Max-Age 1728000;4、server 虚拟服务器详解及通用配置
#每个server用于定义一个虚拟主机,第一个server为默认虚拟服务器server {#设置一个虚拟机主机可以包含自己的全局快同时也可以包含多个location模块。#比如本虚拟机监听的端口、本虚拟机的名称和IP配置多个server 可以使用一个端口比如都使用80端口提供web服务listen 80; #配置server监听的端口server_name localhost; #本server的名称当访问此名称的时候nginx会调用当前serevr内部的配置进程匹配。#是否在响应报文中的Content-Type显示指定的字符集默认off不显示#charset charset | off;#charset koi8-r;#设置编码格式默认是俄语格式建议改为utf-8#示例#charset utf-8;#access_log logs/host.access.log main;autoindex on; # 显示目录默认不开启autoindex_localtime on;# 显示文件修改时间 # 显示文件大小#多个 location 配置....}
5、server 中 多个location 配置 #以http的方式转发mp4请求到指定web服务器。#访问 http://127.0.0.1/6d.mp4 就可以播放视频而视频6d.mp4就在html/dist目录下。location ~ /.mp4$ {#root E:\sh\nginx; # 你的文件目录mp4; # 支持mp4mp4_buffer_size 10m;#处理mp4初始内存大小mp4_max_buffer_size 50m;#处理mp4最大内存大小}location / {root html/dist;#相当于默认页面的目录名称默认是安装目录的相对路径可以使用绝对路径配置。index index.html index.htm;#默认的页面文件名称#给OPTIONS 添加 204 的返回为了处理在发送POST请求时Nginx依然拒绝访问的错误发送预检请求时需要用到方法 OPTIONS所以服务器需要允许该方法。if ($request_method OPTIONS) {return 204;}}#proxy_pass的配置详解在后面location /test {proxy_pass http://127.0.0.1:9006;proxy_redirect off;#关闭重定向#proxy_redirect #旧地址 新地址;#proxy_redirect default; #默认配置#若客户端发过来的请求header中有HOST这个字段$http_host和$host表示的就是原始请求host比如请求的时候HOST的值是http://demo.com那么反代后还是http://demo.com。proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;#将$remote_addr的值放进变量X-Real-IP中此变量名可变$remote_addr的值为客户端的ipproxy_set_header X-forwarded-For $proxy_add_x_forwarded_for;#获得用户真实ip}location /ars {proxy_pass http://192.8.3.211:9006;}#/person/getPersonUrllocation /kvc {add_header Access-Control-Allow-Origin * ;add_header Access-Control-Allow-Credentials true;add_header Access-Control-Allow-Methods *;add_header Access-Control-Allow-Headers *;add_header Access-Control-Max-Age 1728000;proxy_pass http://192.8.3.211:1288;}location /about {root /app/html; #必须要在html目录中创建一个名为about的目录才可以访问否则报错。}location /about { #注意about后不要加/ , 使用alias的时候uri后面如果加了斜杠,则下面的路径配置必须加斜杠否则403alias /opt/html/about; #当访问about的时候会显示alias定义的/opt/html/about里面的内容。}#注意location中使用root指令和alias指令的意义不同#root 给定的路径对应于location中的/uri 左侧的/#alias 给定的路径对应于location中的/uri 的完整路径#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 { #location处理对应的不同错误码的页面定义到/50x.html这个跟对应其server中定义的目录下。root html;#定义默认页面所在的目录}
6、第二个server单独处理视频播放
#serverd第二个服务虚拟服务器#访问http://127.0.0.1:8088/6d.mp4 就可以播放视频而视频6d.mp4就在E:/sh/nginx/nginx目录下。server {listen 8088;server_name 127.0.0.1;charset utf-8,gbk;#root /usr/local/nginx/html/files; # 你的文件目录root E:/sh/nginx/nginx; # 你的文件目录# 显示目录默认不开启autoindex on;# 显示文件大小# 显示文件修改时间autoindex_localtime on;location ~ /.mp4$ {mp4; # 支持mp4mp4_buffer_size 10m;mp4_max_buffer_size 50m;}}
7、第三个server 单独展示图片
#作为下载服务器配置#官方文档:http://nginx.org/en/docs/http/ngx_http_autoindex_module.html#作为上传服务器# 定义缓存目录proxy_cache_path E:/sh/nginx/nginx/cache levels1:2 keys_zonemy_cache:10m max_size1g inactive60m;server {listen 8081;location ~* /.(jpg|jpeg|png|gif)$ {# 开启缓存功能proxy_cache my_cache;# 指定缓存时间单位为秒proxy_cache_valid any 30d;# 如果未命中缓存则从后端服务器获取并进行缓存#proxy_pass http://backend-server;# 其他相关配置...}location ~* /.(css|js)$ {#1h代表一小时expires 1h;# 开启缓存功能proxy_cache my_cache;# 指定缓存时间单位为秒proxy_cache_valid any 30d;}}
8、整个配置文件展示 #全局配置端对全局生效主要设置nginx的启动用户/组启动的工作进程数量工作模式Nginx的PID路径日志路径等。
#user nobody;
#user nginx nginx;#启动Nginx工作进程的用户和组
worker_processes 1; #启动工作进程数数量
#worker_processes [number | auto]; #启动Nginx工作进程的数量,一般设为和CPU核心数相同
#worker_cpu_affinity 00000001 00000010 00000100 00001000 | auto ;
#将Nginx工作进程绑定到指定的CPU核心默认Nginx是不进行进程绑定的绑定并不是意味着当前nginx进程独占以一核心CPU
#但是可以保证此进程不会运行在其他核心上这就极大减少了nginx的工作进程在不同的cpu核心上的来回跳转
#减少了CPU对进程的资源分配与回收以及内存管理等因此可以有效的提升nginx服务器的性能。#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;#pid logs/nginx.pid;#events设置快主要影响nginx服务器与用户的网络连接比如是否允许同时接受多个网络连接
#使用哪种事件驱动模型处理请求每个工作进程可以同时支持的最大连接数是否开启对多工作进程下的网络连接进行序列化等。
events {#设置单个nginx工作进程可以接受的最大并发作为web服务器的时候最大并发数为worker_connections * worker_processes#作为反向代理的时候为(worker_connections * worker_processes)/2worker_connections 1024;
}#http块是Nginx服务器配置中的重要部分缓存、代理和日志格式定义等绝大多数功能和第三方模块都可以在这设置
#http块可以包含多个server块而一个server块中又可以包含多个location块
#server块可以配置文件引入、MIME-Type定义、日志自定义、是否启用sendfile、连接超时时间和单个链接的请求上限等。
http {include mime.types; #导入支持的文件类型,是相对于/apps/nginx/conf的目录在响应报文中将指定的文件扩展名映射至MIME对应的类型default_type application/octet-stream; #除mime.types中文件类型外,设置其它文件默认类型访问其它类型时会提示下载不匹配的类型文件#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 logs/access.log main;#作为web服务器的时候打开sendfile加快静态文件传输指定是否使用sendfile系统调用来传输文件,#sendfile系统调用在两个文件描述符之间直接传递数据(完全在内核中操作)从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝#操作效率很高被称之为零拷贝硬盘 kernel buffer (快速拷贝到kernelsocket buffer) 协议栈。sendfile on;#tcp_nopush on;#keepalive_timeout 0;keepalive_timeout 65; #长连接超时时间单位是秒#开启gzip压缩若想关闭gzip压缩则需要注释掉这句话或者将on换成off#gzip on;#配置允许压缩的页面的最小字节数页面字节数从header头中的Content-Length中获取建议设置成1k因为如果数据小于1k他也会压缩成1k这样会起到反作用。#gzip_min_length 1k;#4个16k的数据流用于存储gzip的压缩结果数据流#gzip_buffers 4 16k;#支持的http版本为1.1#gzip_http_version 1.1;#判断客户端是否支持gzip技术若不支持则不会进行gzip处理#gzip_vary on;# 全局跨域配置#为 * 表示服务器可以接受所有的请求源Origin即接受所有跨域的请求也可以指定一个确定的URLadd_header Access-Control-Allow-Origin * always;#可选字段为true表示允许发送Cookie。同时发送时必须设置XMLHttpRequest.withCredentials为true才有效请求若服务器不允许浏览器发送删除该字段即可。add_header Access-Control-Allow-Credentials true;#代表允许使用指定的方法请求该地址add_header Access-Control-Allow-Methods GET, POST, PATCH, DELETE, PUT, OPTIONS;#代表允许在请求该地址的时候带上指定的请求头例如Content-TypeAuthorization使用逗号,拼接起来放在双引号中add_header Access-Control-Allow-Headers DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type, X-Custom-Header, Access-Control-Expose-Headers, Token, Authorization;add_header Access-Control-Allow-Headers *;#代表着在 1728000 秒之内不用请求该地址的时候 不需要再进行预检请求也就是跨域缓存。add_header Access-Control-Max-Age 1728000;#每个server用于定义一个虚拟主机,第一个server为默认虚拟服务器server {#设置一个虚拟机主机可以包含自己的全局快同时也可以包含多个location模块。#比如本虚拟机监听的端口、本虚拟机的名称和IP配置多个server 可以使用一个端口比如都使用80端口提供web服务listen 80; #配置server监听的端口server_name localhost; #本server的名称当访问此名称的时候nginx会调用当前serevr内部的配置进程匹配。#是否在响应报文中的Content-Type显示指定的字符集默认off不显示#charset charset | off;#charset koi8-r;#设置编码格式默认是俄语格式建议改为utf-8#示例#charset utf-8;#access_log logs/host.access.log main;autoindex on; # 显示目录默认不开启autoindex_localtime on;# 显示文件修改时间 # 显示文件大小#以http的方式转发mp4请求到指定web服务器。#访问 http://127.0.0.1/6d.mp4 就可以播放视频而视频6d.mp4就在html/dist目录下。location ~ /.mp4$ {#root E:\sh\nginx; # 你的文件目录mp4; # 支持mp4mp4_buffer_size 10m;#处理mp4初始内存大小mp4_max_buffer_size 50m;#处理mp4最大内存大小}location / {root html/dist;#相当于默认页面的目录名称默认是安装目录的相对路径可以使用绝对路径配置。index index.html index.htm;#默认的页面文件名称#给OPTIONS 添加 204 的返回为了处理在发送POST请求时Nginx依然拒绝访问的错误发送预检请求时需要用到方法 OPTIONS所以服务器需要允许该方法。if ($request_method OPTIONS) {return 204;}}#proxy_pass的配置详解区别 https://blog.csdn.net/jsxztshaohaibo/article/details/134578031location /test {proxy_pass http://127.0.0.1:9016;proxy_redirect off;#关闭重定向#proxy_redirect #旧地址 新地址;#proxy_redirect default; #默认配置#若客户端发过来的请求header中有HOST这个字段$http_host和$host表示的就是原始请求host比如请求的时候HOST的值是http://demo.com那么反代后还是http://demo.com。proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;#将$remote_addr的值放进变量X-Real-IP中此变量名可变$remote_addr的值为客户端的ipproxy_set_header X-forwarded-For $proxy_add_x_forwarded_for;#获得用户真实ip}location /artemis {proxy_pass http://192.8.3.211:9006;}#/person/getPersonUrllocation /kcvc {add_header Access-Control-Allow-Origin * ;add_header Access-Control-Allow-Credentials true;add_header Access-Control-Allow-Methods *;add_header Access-Control-Allow-Headers *;add_header Access-Control-Max-Age 1728000;proxy_pass http://192.8.3.211:1288;}location /about {root /app/html; #必须要在html目录中创建一个名为about的目录才可以访问否则报错。}location /about { #注意about后不要加/ , 使用alias的时候uri后面如果加了斜杠,则下面的路径配置必须加斜杠否则403alias /opt/html/about; #当访问about的时候会显示alias定义的/opt/html/about里面的内容。}#注意location中使用root指令和alias指令的意义不同#root 给定的路径对应于location中的/uri 左侧的/#alias 给定的路径对应于location中的/uri 的完整路径#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 { #location处理对应的不同错误码的页面定义到/50x.html这个跟对应其server中定义的目录下。root html;#定义默认页面所在的目录}}#serverd第二个服务虚拟服务器#访问http://127.0.0.1:8088/6d.mp4 就可以播放视频而视频6d.mp4就在E:/sh/nginx/nginx目录下。server {listen 8088;server_name 127.0.0.1;charset utf-8,gbk;#root /usr/local/nginx/html/files; # 你的文件目录root E:/sh/nginx/nginx; # 你的文件目录# 显示目录默认不开启autoindex on;# 显示文件大小# 显示文件修改时间autoindex_localtime on;location ~ /.mp4$ {mp4; # 支持mp4mp4_buffer_size 10m;mp4_max_buffer_size 50m;}}#作为下载服务器配置#官方文档:http://nginx.org/en/docs/http/ngx_http_autoindex_module.html#作为上传服务器# 定义缓存目录proxy_cache_path E:/sh/nginx/nginx/cache levels1:2 keys_zonemy_cache:10m max_size1g inactive60m;server {listen 8081;location ~* /.(jpg|jpeg|png|gif)$ {# 开启缓存功能proxy_cache my_cache;# 指定缓存时间单位为秒proxy_cache_valid any 30d;# 如果未命中缓存则从后端服务器获取并进行缓存#proxy_pass http://backend-server;# 其他相关配置...}location ~* /.(css|js)$ {#1h代表一小时expires 1h;# 开启缓存功能proxy_cache my_cache;# 指定缓存时间单位为秒proxy_cache_valid any 30d;}}
}9、参考proxy_pass的配置详解区别
参考代理uri区别文章
到此单体服务的多种使用场景从不同角度展示出来了分享告一段落后面会持续更新敬请期待