当前位置:   article > 正文

JAVA开发与运维(Nginx配置详解)_java nginx配置

java nginx配置

Nginx是一款高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。其特点包括:

  1. 稳定性和功能集:Nginx的源代码以类BSD许可证的形式发布,其稳定性和丰富的功能集,以及简单的配置文件和低系统资源的消耗而闻名。
  2. 轻量级和反向代理:Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。
  3. 负载均衡:Nginx作为反向代理服务器,通过代理的方式可以有效地实现负载均衡,分发用户请求到不同的后端服务器上。这有助于提高系统的可伸缩性和可靠性。
  4. 正向代理和反向代理的区别:正向代理是指客户端通过代理服务器访问目标服务器,客户端需要手动设置代理服务器的IP和端口号;而反向代理是指客户端对代理是无感知的,客户端不需要任何配置就可以访问,只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后返回给客户端。

对于Nginx的使用,最重要的是理解每个配置项的作用。所以一份详细的Nginx的配置对于JAVA开发和运维尤为重要。我们一般使用两个Nginx配置文件对Nginx进行配置,一个是公共文件nginx。conf,一个是自定义文件 比如某个项目的nginx文件。nginx_1.conf。然后通nginx.conf 把 nginx_1.conf包含进去。

下面上各项配置信息详解》

  1. ########### 每个指令必须有分号结束。#################
  2. #user administrator administrators; #配置用户或者组,默认为nobody nobody。
  3. worker_processes 8; #允许生成的进程数,默认为1
  4. #pid /nginx/pid/nginx.pid; #指定nginx进程运行文件存放地址
  5. error_log log/error.log debug; #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
  6. events {
  7. accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on
  8. multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为off
  9. #use epoll; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
  10. worker_connections 65535; #最大连接数,默认为512
  11. }
  12. http {
  13. include mime.types; #文件扩展名与文件类型映射表
  14. default_type application/octet-stream; #默认文件类型,默认为text/plain
  15. #access_log off; #取消服务日志
  16. log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
  17. access_log log/access.log myFormat; #combined为日志格式的默认值
  18. sendfile on; #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
  19. sendfile_max_chunk 100k; #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
  20. keepalive_timeout 65; #连接超时时间,默认为75s,可以在http,server,location块。
  21. upstream mysvr {
  22. server 127.0.0.1:8080;
  23. server 192.168.10.121:8081 backup; #热备
  24. }
  25. error_page 404 https://www.baidu.com; #错误页
  26. server {
  27. keepalive_requests 120; #单连接请求上限次数。
  28. listen 4545; #监听端口
  29. server_name 127.0.0.1; #监听地址
  30. location ~*^.+$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
  31. #root path; #根目录
  32. #index vv.txt; #设置默认页
  33. proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表
  34. deny 127.0.0.1; #拒绝的ip
  35. allow 172.18.5.54; #允许的ip
  36. }
  37. }
  38. }

  1. #user nobody;
  2. # CPU核心数-1
  3. worker_processes 3;
  4. # nginx错误日志的目录
  5. #error_log logs/error.log;
  6. error_log logs/error.log notice;
  7. #error_log logs/error.log info;
  8. # nginx进程id记录文件路径
  9. pid logs/nginx.pid;
  10. # 单个进程可打开的最大文件数量
  11. worker_rlimit_nofile 1024;
  12. events {
  13. # epoll 模型对事件处理进行优化
  14. use epoll;
  15. # 客户端最大连接数,建议与单个进程可打开的最大文件数量保持一致
  16. worker_connections 1024;
  17. }
  18. http {
  19. # 隐藏nginx版本信息
  20. server_tokens off;
  21. include mime.types;
  22. default_type application/octet-stream;
  23. # 日志格式
  24. log_format main '[time:$request_time s] $remote_addr - $remote_user [$time_local] "$request" '
  25. '$status $body_bytes_sent "$http_referer" '
  26. '"$http_user_agent" "$http_x_forwarded_for"'
  27. '$upstream_addr $upstream_response_time $request_time $upstream_status '
  28. '"$http_range" "$sent_http_content_range"'
  29. '"$gzip_ratio"'
  30. '"$query_string"'
  31. '"-http_refer:$http_referer"';
  32. # nginx日志缓存,降低日志IO。
  33. open_log_file_cache max=10240 inactive=60s valid=1m min_uses=2;
  34. # 文件上传大小
  35. client_max_body_size 100m;
  36. client_header_buffer_size 64k;
  37. large_client_header_buffers 4 4k;
  38. # 压缩配置
  39. gzip on;
  40. gzip_min_length 2k;
  41. gzip_buffers 4 16k;
  42. gzip_comp_level 3;
  43. gzip_vary on;
  44. gzip_types text/plain application/x-javascript application/javascript application/css text/css application/xml application/json;
  45. # 缓存配置
  46. proxy_connect_timeout 3600s;# Nginx与代理的服务连接超时时间(Nginx请求代理服务)
  47. proxy_read_timeout 3600s; # Nginx从代理服务读取文件超时时间
  48. proxy_send_timeout 3600s; # Nginx向代理服务写入文件超时时间
  49. proxy_buffer_size 512k; # 客户端请求头header大小
  50. proxy_buffers 64 512k; # 缓冲区的大小和数量
  51. proxy_busy_buffers_size 512k; #
  52. proxy_temp_file_write_size 512k; #
  53. ## 当上游服务器的响应过大不能存储到配置的缓冲区域时,Nginx存储临时文件硬盘路径 ,设置为服务器上存在的目录
  54. proxy_temp_path /usr/local/nginx1.20/cache_temp_path;
  55. # 注意【cache_one】,后续的location会用到
  56. proxy_cache_path /usr/local/nginx1.20/cache_path levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=10g use_temp_path=off;
  57. # proxy_cache_key $host$request_uri;
  58. client_body_buffer_size 10240k;
  59. output_buffers 8 64k;
  60. postpone_output 1460;
  61. client_header_timeout 120s;
  62. client_body_timeout 120s;
  63. sendfile on;
  64. keepalive_timeout 65;
  65. upstream cwbb {
  66. # 会话保持,必须安装sticky模块
  67. sticky name="hellosticky";
  68. server 192.168.137.121:8080 max_fails=5 fail_timeout=600s weight=10;
  69. server 192.168.137.121:8081 max_fails=5 fail_timeout=600s weight=10;
  70. server 192.168.137.121:8083 max_fails=5 fail_timeout=600s weight=10;
  71. server 192.168.137.121:8084 max_fails=5 fail_timeout=600s weight=10;
  72. check interval=3000 rise=2 fall=5 timeout=1000 type=http;
  73. }
  74. server {
  75. listen 80;
  76. server_name localhost;
  77. # 如果没有配置https证书,则listen 443 ssl; ssl_certificate; ssl_certificate_key; ssl_session_cache; ssl_session_timeout;都可以用#注释
  78. #listen 443 ssl;
  79. #ssl_certificate /usr/local/nginx1.20/cert/xxx.crt;
  80. #ssl_certificate_key /usr/local/nginx1.20/cert/xxx.key;
  81. #ssl_session_cache shared:SSL:10m;
  82. #ssl_session_timeout 5m;
  83. #ssl_ciphers HIGH:!aNULL:!MD5;
  84. #ssl_prefer_server_ciphers on;
  85. location ~* ^.+\.(jpg|jpeg|gif|png|js|ttf|css|json|)$ {
  86. proxy_pass http://cwbb;
  87. proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie;
  88. proxy_cache off;
  89. proxy_redirect off;
  90. proxy_set_header X-Real-IP $remote_addr;
  91. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  92. proxy_connect_timeout 180;
  93. proxy_send_timeout 180;
  94. proxy_read_timeout 180;
  95. proxy_buffer_size 128k;
  96. proxy_buffers 4 128k;
  97. proxy_busy_buffers_size 128k;
  98. proxy_temp_file_write_size 128k;
  99. proxy_cache_valid 200 304 302 24h;
  100. proxy_cache_key $server_addr$uri$is_args$args;
  101. add_header Cache-Control no-cache;
  102. }
  103. # check模块配置
  104. location /check_status {
  105. check_status;
  106. access_log off;
  107. }
  108. # stub模块配置
  109. location /stub_status {
  110. stub_status;
  111. access_log off;
  112. }
  113. error_page 500 502 503 504 /50x.html;
  114. location = /50x.html {
  115. root html;
  116. }
  117. ## 根目录访问 ,如果有其他需要代理的路径,则依次增加location即可
  118. location / {
  119. ## 如果信息中心强制禁止不安全的请求类型,增加如下配置,GET|POST|HEAD是允许的请求类型
  120. if ($request_method !~ ^(GET|POST|HEAD)$) {
  121. return 403 '{"timestamp":"2019-05-30T12:39:03.593","success":false,"errorCode":"403","errorMessage":"不安全的请求类型:$request_method","errorDetail":"不安全的URL:$request_uri","data":null}';
  122. }
  123. proxy_pass http://cwbb;
  124. limit_rate 400k;
  125. limit_rate_after 5m;
  126. proxy_connect_timeout 1200;
  127. proxy_send_timeout 1200s;
  128. proxy_read_timeout 1200s;
  129. proxy_redirect off;
  130. proxy_set_header Host $host;
  131. proxy_set_header X-Real-IP $remote_addr;
  132. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  133. add_header Cache-Control no-cache;
  134. }
  135. }
  136. }
  1. http {//协议级别
  2.   include mime.types;
  3.   default_type application/octet-stream;
  4.   keepalive_timeout 65;
  5.   gzip on;
  6.   upstream {//负载均衡配置
  7.   …
  8.   }
  9.   server {//服务器级别,每个server类似于httpd中的一个
  10.    listen 80;
  11.     server_name localhost;
  12.     location / {//请求级别,类似于httpd中的,用于定义URL与本地文件系统的映射关系
  13.     root html;
  14.     index index.html index.htm;
  15.    }
  16.   }
  17. }

如:我的nginx公共配置

  1. #配置用户或者组,默认为nobody
  2. user nginx;
  3. #允许生成的进程数,默认为1,一般配置为cpu核数
  4. worker_processes auto;
  5. #错误日志
  6. error_log /var/log/nginx/error.log notice;
  7. #进程ID
  8. pid /var/run/nginx.pid;
  9. events {
  10. accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on
  11. multi_accept off; #设置一个进程是否同时接受多个网络连接,默认为off
  12. # epoll 模型对事件处理进行优化
  13. use epoll; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
  14. #允许最大连接数
  15. worker_connections 65535;
  16. }
  17. http {
  18. #隐藏nginx版本信息
  19. server_tokens off;
  20. #文件扩展名与文件类型映射表
  21. include /etc/nginx/mime.types;
  22. #默认文件类型,默认为text/plain
  23. default_type application/octet-stream;
  24. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  25. '$status $body_bytes_sent "$http_referer" '
  26. '"$http_user_agent" "$http_x_forwarded_for"';
  27. access_log /var/log/nginx/access.log main;
  28. sendfile on;
  29. #tcp_nopush on;
  30. #连接超时时间,默认为75s,可以在http,server,location块。
  31. keepalive_timeout 65;
  32. #gzip on;
  33. client_max_body_size 1024m;
  34. #包含的自定义配置文件块
  35. include /etc/nginx/conf.d/*.conf;
  36. #是否传递4xx和5xx错误信息到客户端,或者允许nginx使用error_page处理错误信息。
  37. fastcgi_intercept_errors on;
  38. }

单机自定义server配置

  1. #8561端口服务器
  2. server {
  3. #监听端口
  4. listen 8561;
  5. #域名配置项
  6. server_name _;
  7. location /h5 {
  8. root /usr/share/nginx/html/;
  9. try_files $uri $uri/ /h5/index.html;
  10. }
  11. location /mhyr-project {
  12. root /usr/share/nginx/html/mhyr-project/;
  13. try_files $uri $uri/ /index.html;
  14. }
  15. #静态资源配置项
  16. location /resource/ {
  17. proxy_pass https://tenc.cos.ap-beij.myqcloud.com/;
  18. }
  19. #静态资源
  20. location /icon/ {
  21. root /usr/share/nginx/html/mhyr-project-plat;
  22. try_files $uri $uri/ /index.html;
  23. }
  24. #反向代理
  25. location /mhyrproject/ {
  26. proxy_set_header Host $host;
  27. client_max_body_size 10m;
  28. proxy_set_header X-Real-IP $remote_addr;
  29. proxy_set_header REMOTE-HOST $remote_addr;
  30. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  31. proxy_pass http://localhost:8100/;
  32. }
  33. #错误页面配置项
  34. error_page 403 404 /404.html;
  35. location = /404.html {
  36. root error;
  37. }
  38. # redirect server error pages to the static page /50x.html
  39. # error_page 500 502 503 504 /50x.html;
  40. location = /50x.html {
  41. root html;
  42. }
  43. }
  44. #443端口服务器
  45. server {
  46. listen 443 ssl http2;
  47. #域名配置项
  48. server_name t-project.mhyr.cn;
  49. #证书配置项
  50. ssl_certificate /etc/nginx/cert/mhyr.cn2022.txt;
  51. #证书秘钥配置项
  52. ssl_certificate_key /etc/nginx/cert/private2022_unsecure.key;
  53. ssl_prefer_server_ciphers on;
  54. #SSL协议配置项
  55. ssl_protocols TLSv1.2;
  56. location /h5 {
  57. root /usr/share/nginx/html/;
  58. try_files $uri $uri/ /h5/index.html;
  59. }
  60. location /mhyrproject/ {
  61. proxy_set_header Host $host;
  62. client_max_body_size 10m;
  63. proxy_set_header X-Real-IP $remote_addr;
  64. proxy_set_header REMOTE-HOST $remote_addr;
  65. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  66. #反向代理
  67. proxy_pass http://localhost:8100/;
  68. }
  69. location /resource/ {
  70. proxy_pass https://jt-mbr-uat-1301587776.cos.ap-beijing.myqcloud.com/;
  71. }
  72. location /icon/ {
  73. root /usr/share/nginx/html/mhyr-project-plat;
  74. try_files $uri $uri/ /index.html;
  75. }
  76. proxy_intercept_errors on;
  77. error_page 500 502 503 504 404 403 /404.html;
  78. #error_page 500 502 503 504 404 403 = https://project-test.mangocity.com/mhyr-project/#/error;
  79. location = /404.html {
  80. root /usr/share/nginx/html;
  81. }
  82. # redirect server error pages to the static page /50x.html
  83. # error_page 500 502 503 504 /50x.html;
  84. #location = /50x.html {
  85. # root html;
  86. #}
  87. }

配置负载均衡的话需要:

#负载均衡配置

  # apisSrvice 为反向代理的服务名称   http://localhost:8100/;apisSrvice http://localhost:8100/;
upstream apisSrvice { 
    server  20.11.1.26:9100 max_fails=2  fail_timeout=5s;
    server  20.11.1.45:9100 max_fails=2  fail_timeout=5s;
    server  20.11.1.46:9100 max_fails=2  fail_timeout=5s;
    server  20.11.1.30:9100 max_fails=2  fail_timeout=5s;
    server  20.11.1.21:9100 max_fails=2  fail_timeout=5s;
}

Nginx配置SSL证书详解

  1. # Nginx 如何添加对SSL的支持
  2. # 需要安装 --with-http_ssl_module模块
  3. # ssl指令:该指令用来在指定的服务器开启HTTPS,可以使用listen 443 ssl来开启
  4. # 语法:ssl on | off;
  5. # 默认:off
  6. # 位置 http、server
  7. server {
  8. lsten 443 ssl;
  9. }
  10. # ssl_certificate指令:为当前这个虚拟主机指定一个带有PEM格式证书的证书。
  11. # 语法:ssl_ceritificate file;
  12. # 默认:无
  13. # 位置 http、server
  14. ssl_ceritificate www.sohu.com.pem;
  15. # ssl_certificate_key指令:为pem指定secret_key文件路劲。
  16. # 语法:ssl_certificate_key file;
  17. # 默认:无
  18. # 位置 http、server
  19. ssl_ceritificate www.sohu.com.key;
  20. # ssl_session_cache指令:该指令用来配置用于SSL回话的缓存
  21. # 语法: ssl_session_cache off | none | [builtin[:size]] [shared:name:size]
  22. # 默认:none
  23. # 位置 http、server
  24. # off:禁用回话魂村,客户端不得重复使用会话
  25. # none:禁止使用会话缓存,客户端可以重复使用,但是并没有在缓存中存储会话参数。
  26. # builtin:内置OpenSSL缓存,仅在一个工作进程中使用
  27. # shared:所有工作进程之间共享缓存,缓存的相关信息用name和size来指定
  28. ssl_session_cache none;
  29. # ssl_session_timeout:开启SSL会话功能后,设置客户端能够反复使用存储在缓存中的会话参数时间。
  30. # 语法:ssl_session_timeout time;
  31. # 默认:5m //也就是5分钟
  32. # 位置 http、server
  33. ssl_session_timeout 5m;
  34. # ssl_ciphers:支出允许的密码,密码指定为OpenSSL指定的密码格式。
  35. # 语法:ssl_ciphers ciphers;
  36. # 默认值:ssl_ciphers HIGH:!aNULL:!MD5;
  37. # 位置 http、server
  38. ssl_ciphers HIGH:!aNULL:!MD5;
  39. # ssl_prefer_server_ciphers:该指令指定是否服务器密码优先客户端密码
  40. # 语法:ssl_prefer_server_ciphers on | off
  41. # 默认:off
  42. # 位置 http、server
  43. ssl_prefer_server_ciphers off
  44. # SSL证书来源
  45. # 1.去阿里云或者腾讯云或者其他证书机构购买或者申请SSL证书。
  46. # 2.用OpenSSL去自己制作SSL证书
  47. # OpenSSL生成证书的命令
  48. mkdir /root/cert
  49. cd /root/cert
  50. openssl genrsa -des3 -out server.key 1024
  51. openssl req -new -key server.key -out server.csr
  52. cp server.key server.key.org
  53. openssl rsa -in server.key.org -out server.key
  54. openssl x509 -req -days 365 -in server.csr -singnkey server.key -out server.crt
  55. # 如何配置刚生成的SSL证书
  56. server {
  57. listen 443 ssl;
  58. server_name localhost;
  59. ssl_certificate cert.pem;
  60. ssl_certificate_key cert.key;
  61. ssl_session_cache shared:SSL:1m;
  62. ssl_session_timeout 5m;
  63. ssl_ciphers HIGH:!aNULL:MD5;
  64. ssl_prefer_server_ciphers on;
  65. location / {
  66. root html;
  67. index index.html;
  68. }
  69. }
  70. # 再次重启的时候浏览器还是会报错,是因为我们自己生成的证书是没有认证机构的。要不报错就必须从认证机构哪里获得证书。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/453978
推荐阅读
相关标签
  

闽ICP备14008679号