一、nginx.conf
该文件是 nginx 的配置文件,可以在里面进行相关的配置。
1、nginx.conf 的组成
Nginx 的配置文件由三部分组成:全局配置、events 配置和 HTTP 配置
**
2、全局配置

该部分为配置文件的开头到 events 配置开始之前的段落中,如上图所示,主要用于配置用户、工作进程数、日志目录配置和pid配置。
工作线程数,在处理并发时很重要。
3、events 配置

该部分位于配置文件的 HTTP 配置和全局配置之间。主要用于设置客户端和服务器之间的一些配置,如上图所示的客户连接数就是其中一项,也是出厂配置好的,默认是 1024 ,该连接数在实际生产环境中是不够的,尤其是像淘宝这种大型网站,几分钟内的客户连接数就远超一千多个了。
4、HTTP 配置
http {include 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 logs/access.log main;sendfile on;#tcp_nopush on;#keepalive_timeout 0;keepalive_timeout 65;#gzip on;# 添加nacos集群配置#upstream cluster{# server 127.0.0.1:8848;# server 127.0.0.1:8849;# server 127.0.0.1:8850;#}server {listen 8081;server_name nginx;#charset koi8-r;#access_log logs/host.access.log main;location / {#root html;index index.html index.htm;#proxy_pass http://cluster;}#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 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;#}}# another virtual host using mix of IP-, name-, and port-based configuration##server {# listen 8000;# listen somename:8080;# server_name somename alias another.alias;# location / {# root html;# index index.html index.htm;# }#}# HTTPS server##server {# listen 443 ssl;# server_name localhost;# ssl_certificate cert.pem;# ssl_certificate_key cert.key;# ssl_session_cache shared:SSL:1m;# ssl_session_timeout 5m;# ssl_ciphers HIGH:!aNULL:!MD5;# ssl_prefer_server_ciphers on;# location / {# root html;# index index.html index.htm;# }#}}
该部分是 Nginx 配置必须掌握的,通常所用的 Nginx 反向代理、负载均衡等等都是在这一块进行配置的。该块可以细分为 HTTP 全局块和 Server 块。
4.1、HTTP 全局块
该部分主要配置文件引入、MIME-TYPE 定义、日志自定义、连接超时、单链接请求数上限等等。
4.2、Server 块
该块的配置和虚拟主机密切相关,虚拟主机从用户的角度来看,和一台独立的主机没有什么区别,该技术是为了节省互联网服务器硬件成本。每个 HTTP 块可以包括多个 Server 块,每个 Server 块就相当于一台虚拟主机,而每个 Server 块也可分为 Server 全局块 和 location 块,location 块可以包含多个。
4.2.1、Server 全局块
该块的配置主要用于设置当前虚拟主机的监听端口、当前虚拟主机的名称或 IP 配置、SSL 相关配置。
4.2.2、Server location 块
这块的配置主要用于设置资源的路径,如静态资源、服务配置中心等等资源。
二、Nginx 反向代理配置
1、反向代理效果
打开浏览器,在浏览器输入一个地址,例如输入 www.123.com 后跳转到 Tomcat 的主页面。
2、设置步骤
1)启动 Tomcat,默认端口
2)防火墙允许 8080 端口入站
3)修改 hosts 文件,增加 www.pyc.com 的解析为 127.0.0.1
4)设置 Nginx 监听端口为 80
5)在 80端口的 server 块 中的 location,增加一句: **proxy_pass http://127.0.0.1:8080/;** ,实现反向代理。
6)启动 Nginx 服务
3、测试

访问 http://www.pyc.com,成功跳转到 Tomcat 主页。
4、实现特定路径转发
server{listen 80;server_name nginx;location ~ /edu/ {proxy_pass http://localhost:8080/;}location ~ /zqu/ {proxy_pass http://localhost:8081/;}}
5、location 指令说明
Nginx 的 Server 块里的 location 用于匹配 URL,语法如下:
location [= | ~ | ~* | ^~] uri {}
1)=,用于不含正则表达式的 uri 前,要求字符串必须与 uri 严格匹配,匹配成功则跳转,匹配失败则继续搜索后续的匹配
2)~,用于表示 uri 包含正则表达式,并且区分大小写
3)~*,在 2)的基础修改为不区分大小写
4)^~,用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 进行处理请求,而不再 location 块中的正则 uri 和请求字符串作匹配
三、Nginx 负载均衡配置
1、负载均衡效果
就是Nginx 中配置一个集群,对外暴露统一的地址和端口,客户发来的请求由Nginx 分发到具体的服务主机中
2、设置步骤
1)在 nginx 的配置文件中增加一个 upstream 配置,如下:
upstream cluster{[ip_hash]server 127.0.0.1:8848 [weight=1];server 127.0.0.1:8849;server 127.0.0.1:8850;[fair]}
2)然后在 location 中增加一句反向代理 **proxy_pass http://cluster** ,增加词句后,程序要使用服务,只需向 Nginx 发送请求即可。
3、Nginx 负载均衡策略
Nginx 提供了以下几种进行负载均衡的配置策略:
1)轮询,这个是默认的方式,按每个请求的先后次序逐一分配服务器集群中,如果集群中有服务器down 掉了,Nginx 会自动剔除。
2)权重,通过在服务器列表中每个服务器的地址后面使用 weight=value 设置上不同服务器的权重;默认值为1,权重越高则承担处理更多的客户端请求,适用于后端服务器性能不均的情况。
3)ip_hash,在服务器列表第一行加上该命令,则表示开启根据ip 的hash 值进行负载均衡,这样每个客户将会访问固定的服务器,可以解决session的问题。
4)fair(第三方),根据后端服务器的响应时间来分配请求,响应时间短的优先分配,适用于重用户体验的场景。
四、Nginx 动静分离配置
1、实现效果
将动态请求和静态请求分离,而不是指将动态页面和静态页面进行分离。可以理解为,Nginx 负责处理静态请求,Tomcat 负责处理动态请求。所谓动态请求,往往涉及前后端的交互,即需要从数据库查询数据返回给前端;而静态请求往往就是简单的获取一个网页,网页里的内容都是硬编码编辑好的,无需根据用户的操作进行页面内容更新。
使用 location 的 url 匹配功能设置不同的后缀名跳转到不同的服务器,进一步的还可以用 expires 参数设置浏览器缓存的过期时间,例如设置值为 3d,表示三天内访问这个 url,发送一个请求用于比对服务器上该文件最后的更新时间,若没有变化则返回状态码 304,如果有修改则从服务器重新抓取该文件,返回状态码200。从中也可以看出,对于更新比较频繁的文件,则不适合使用expire策略了。
2、配置步骤
1)在 Nginx.conf 文件中的 Server 块
location /images/ {root /images/;autoindex on;}location / {root html;index index.html index.htm;# 反向代理示例#proxy_pass http://cluster;proxy_pass http://127.0.0.1:8080/;}
