一、nginx.conf

该文件是 nginx 的配置文件,可以在里面进行相关的配置。

1、nginx.conf 的组成

Nginx 的配置文件由三部分组成:全局配置、events 配置和 HTTP 配置
**

2、全局配置

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

3、events 配置

image.png
该部分位于配置文件的 HTTP 配置和全局配置之间。主要用于设置客户端和服务器之间的一些配置,如上图所示的客户连接数就是其中一项,也是出厂配置好的,默认是 1024 ,该连接数在实际生产环境中是不够的,尤其是像淘宝这种大型网站,几分钟内的客户连接数就远超一千多个了。

4、HTTP 配置

  1. http {
  2. include mime.types;
  3. default_type application/octet-stream;
  4. #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  5. # '$status $body_bytes_sent "$http_referer" '
  6. # '"$http_user_agent" "$http_x_forwarded_for"';
  7. #access_log logs/access.log main;
  8. sendfile on;
  9. #tcp_nopush on;
  10. #keepalive_timeout 0;
  11. keepalive_timeout 65;
  12. #gzip on;
  13. # 添加nacos集群配置
  14. #upstream cluster{
  15. # server 127.0.0.1:8848;
  16. # server 127.0.0.1:8849;
  17. # server 127.0.0.1:8850;
  18. #}
  19. server {
  20. listen 8081;
  21. server_name nginx;
  22. #charset koi8-r;
  23. #access_log logs/host.access.log main;
  24. location / {
  25. #root html;
  26. index index.html index.htm;
  27. #proxy_pass http://cluster;
  28. }
  29. #error_page 404 /404.html;
  30. # redirect server error pages to the static page /50x.html
  31. #
  32. error_page 500 502 503 504 /50x.html;
  33. location = /50x.html {
  34. root html;
  35. }
  36. # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  37. #
  38. #location ~ \.php$ {
  39. # proxy_pass http://127.0.0.1;
  40. #}
  41. # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  42. #
  43. #location ~ \.php$ {
  44. # root html;
  45. # fastcgi_pass 127.0.0.1:9000;
  46. # fastcgi_index index.php;
  47. # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
  48. # include fastcgi_params;
  49. #}
  50. # deny access to .htaccess files, if Apache's document root
  51. # concurs with nginx's one
  52. #
  53. #location ~ /\.ht {
  54. # deny all;
  55. #}
  56. }
  57. # another virtual host using mix of IP-, name-, and port-based configuration
  58. #
  59. #server {
  60. # listen 8000;
  61. # listen somename:8080;
  62. # server_name somename alias another.alias;
  63. # location / {
  64. # root html;
  65. # index index.html index.htm;
  66. # }
  67. #}
  68. # HTTPS server
  69. #
  70. #server {
  71. # listen 443 ssl;
  72. # server_name localhost;
  73. # ssl_certificate cert.pem;
  74. # ssl_certificate_key cert.key;
  75. # ssl_session_cache shared:SSL:1m;
  76. # ssl_session_timeout 5m;
  77. # ssl_ciphers HIGH:!aNULL:!MD5;
  78. # ssl_prefer_server_ciphers on;
  79. # location / {
  80. # root html;
  81. # index index.html index.htm;
  82. # }
  83. #}
  84. }

该部分是 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、测试

image.png
访问 http://www.pyc.com,成功跳转到 Tomcat 主页。

4、实现特定路径转发

  1. server{
  2. listen 80;
  3. server_name nginx;
  4. location ~ /edu/ {
  5. proxy_pass http://localhost:8080/;
  6. }
  7. location ~ /zqu/ {
  8. proxy_pass http://localhost:8081/;
  9. }
  10. }

5、location 指令说明

Nginx 的 Server 块里的 location 用于匹配 URL,语法如下:

  1. 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 配置,如下:

  1. upstream cluster{
  2. [ip_hash]
  3. server 127.0.0.1:8848 [weight=1];
  4. server 127.0.0.1:8849;
  5. server 127.0.0.1:8850;
  6. [fair]
  7. }

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 负责处理动态请求。所谓动态请求,往往涉及前后端的交互,即需要从数据库查询数据返回给前端;而静态请求往往就是简单的获取一个网页,网页里的内容都是硬编码编辑好的,无需根据用户的操作进行页面内容更新。
Nginx 配置 - 图4

使用 location 的 url 匹配功能设置不同的后缀名跳转到不同的服务器,进一步的还可以用 expires 参数设置浏览器缓存的过期时间,例如设置值为 3d,表示三天内访问这个 url,发送一个请求用于比对服务器上该文件最后的更新时间,若没有变化则返回状态码 304,如果有修改则从服务器重新抓取该文件,返回状态码200。从中也可以看出,对于更新比较频繁的文件,则不适合使用expire策略了。

2、配置步骤

1)在 Nginx.conf 文件中的 Server 块

  1. location /images/ {
  2. root /images/;
  3. autoindex on;
  4. }
  5. location / {
  6. root html;
  7. index index.html index.htm;
  8. # 反向代理示例
  9. #proxy_pass http://cluster;
  10. proxy_pass http://127.0.0.1:8080/;
  11. }