Nginx配置反向代理和负载均衡

怼烎@ 2022-05-17 00:50 391阅读 0赞

今天给大家介绍一下如何利用Nginx进行反向代理,之所以介绍这个的原因是,因为开发的时候遇到一个很尴尬的场景。因为是springboot项目,所以每一个控制类的端口都不一样,但是app那边所有接口都是对应一个ip和一个端口。如果我们想要实现本地app调式,就必须配置一个nginx,进行反向代理连接我们启动的服务器。废话不多说,开始我们nginx配置的介绍。

首先我们需要下载一个nginx,大家可以去官网上面下载,也可以直接在我的百度云盘下载。(nginx版本nginx-1.13.2)云盘地址:链接:https://pan.baidu.com/s/1NwZvS6-9cq5egCxsOHyrYg 密码:tw4p

然后接下来主要工作是在nginx中修改nginx.conf配置就可以了。

389_method_get-resource_shareToken_0666DC05D37C446CB17E2C046291D256_entryId_205468727

nginx.conf模块配置文件如下所示,这边我们只需要修改一些配置,就可以简单的实现反向代理和负载均衡功能了,我们先来看一下默认的配置文件。

#user nobody;
worker_processes 1;

#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid logs/nginx.pid;

events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;

  1. \#log\_format main '$remote\_addr - $remote\_user \[$time\_local\] "$request" '
  2. \# '$status $body\_bytes\_sent "$http\_referer" '
  3. \# '"$http\_user\_agent" "$http\_x\_forwarded\_for"';
  4. \#access\_log logs/access.log main;
  5. sendfile on;
  6. \#tcp\_nopush on;
  7. \#keepalive\_timeout 0;
  8. keepalive\_timeout 65;
  9. \#gzip on;
  10. server \{
  11. listen 80;
  12. server\_name localhost;
  13. \#charset koi8-r;
  14. \#access\_log logs/host.access.log main;
  15. location / \{
  16. root html;
  17. index index.html index.htm;
  18. \}
  19. \#error\_page 404 /404.html;
  20. \# redirect server error pages to the static page /50x.html
  21. \#
  22. error\_page 500 502 503 504 /50x.html;
  23. location = /50x.html \{
  24. root html;
  25. \}
  26. \# proxy the PHP scripts to Apache listening on 127.0.0.1:80
  27. \#
  28. \#location ~ \\.php$ \{
  29. \# proxy\_pass http://127.0.0.1;
  30. \#\}
  31. \# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  32. \#
  33. \#location ~ \\.php$ \{
  34. \# root html;
  35. \# fastcgi\_pass 127.0.0.1:9000;
  36. \# fastcgi\_index index.php;
  37. \# fastcgi\_param SCRIPT\_FILENAME /scripts$fastcgi\_script\_name;
  38. \# include fastcgi\_params;
  39. \#\}
  40. \# deny access to .htaccess files, if Apache's document root
  41. \# concurs with nginx's one
  42. \#
  43. \#location ~ /\\.ht \{
  44. \# deny all;
  45. \#\}
  46. \}
  47. \# another virtual host using mix of IP-, name-, and port-based configuration
  48. \#
  49. \#server \{
  50. \# listen 8000;
  51. \# listen somename:8080;
  52. \# server\_name somename alias another.alias;
  53. \# location / \{
  54. \# root html;
  55. \# index index.html index.htm;
  56. \# \}
  57. \#\}
  58. \# HTTPS server
  59. \#
  60. \#server \{
  61. \# listen 443 ssl;
  62. \# server\_name localhost;
  63. \# ssl\_certificate cert.pem;
  64. \# ssl\_certificate\_key cert.key;
  65. \# ssl\_session\_cache shared:SSL:1m;
  66. \# ssl\_session\_timeout 5m;
  67. \# ssl\_ciphers HIGH:!aNULL:!MD5;
  68. \# ssl\_prefer\_server\_ciphers on;
  69. \# location / \{
  70. \# root html;
  71. \# index index.html index.htm;
  72. \# \}
  73. \#\}

}

配置文件基本都包含我们想要的功能,就是有些配置项可能我们用不到,所以官网上面就给我们屏蔽了。我们只需要在默认的配置文件上面添加如下映射配置,和映射对应的具体服务地址。

映射配置

location /模块名称/{

ssi on;

ssi_silent_errors on;

proxy_read_timeout 300;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_pass http://映射名称;

}

映射对应的具体服务地址

upstream 映射名称 {

server ip:端口;

}

负载均衡的实现就是写多个server服务就可以了,然后我们也可以对不同的服务设置不同的权重,这么就不进行过多的介绍了。这些都配置好之后,我们启动一下nginx服务就可以了,下面我们来具体看一下,我配置的具体信息,大家一看就知道是什么情况了,其实很简单的。

#user nobody;
worker_processes 1;

#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid logs/nginx.pid;

events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;

  1. \#log\_format main '$remote\_addr - $remote\_user \[$time\_local\] "$request" '
  2. \# '$status $body\_bytes\_sent "$http\_referer" '
  3. \# '"$http\_user\_agent" "$http\_x\_forwarded\_for"';
  4. \#access\_log logs/access.log main;
  5. sendfile on;
  6. \#tcp\_nopush on;
  7. \#keepalive\_timeout 0;
  8. keepalive\_timeout 65;
  9. \#gzip on;
  10. upstream platform-activity \{
  11. server 127.0.0.1:8090;
  12. \}
  13. upstream platform-admin \{
  14. server 127.0.0.1:8091;
  15. \}
  16. upstream platform-es \{
  17. server 127.0.0.1:8092;
  18. \}
  19. upstream platform-goods \{
  20. server 127.0.0.1:8093;
  21. \}
  22. upstream platform-im \{
  23. server 127.0.0.1:8094;
  24. \}
  25. upstream platform-log \{
  26. server 127.0.0.1:8095;
  27. \}
  28. upstream platform-login \{
  29. server 127.0.0.1:8096;
  30. \}
  31. upstream platform-mq \{
  32. server 127.0.0.1:8097;
  33. \}
  34. upstream platform-score \{
  35. server 127.0.0.1:8098;
  36. \}
  37. upstream platform-task \{
  38. server 127.0.0.1:8099;
  39. \}
  40. upstream platform-team \{
  41. server 127.0.0.1:8190;
  42. \}
  43. upstream platform-user \{
  44. server 127.0.0.1:8191;
  45. \}
  46. server \{
  47. listen 80;
  48. server\_name 192.168.10.112;
  49. \#charset koi8-r;
  50. \#access\_log logs/host.access.log main;
  51. location / \{
  52. root html;
  53. index index.html index.htm;
  54. \}
  55. location /platform-activity/\{
  56. ssi on;
  57. ssi\_silent\_errors on;
  58. proxy\_read\_timeout 300;
  59. proxy\_set\_header Host $host;
  60. proxy\_set\_header X-Real-IP $remote\_addr;
  61. proxy\_set\_header X-Forwarded-For $proxy\_add\_x\_forwarded\_for;
  62. proxy\_pass http://platform-activity;
  63. \}
  64. location /platform-admin/\{
  65. ssi on;
  66. ssi\_silent\_errors on;
  67. proxy\_read\_timeout 300;
  68. proxy\_set\_header Host $host;
  69. proxy\_set\_header X-Real-IP $remote\_addr;
  70. proxy\_set\_header X-Forwarded-For $proxy\_add\_x\_forwarded\_for;
  71. proxy\_pass http://platform-admin;
  72. \}
  73. location /platform-es/\{
  74. ssi on;
  75. ssi\_silent\_errors on;
  76. proxy\_read\_timeout 300;
  77. proxy\_set\_header Host $host;
  78. proxy\_set\_header X-Real-IP $remote\_addr;
  79. proxy\_set\_header X-Forwarded-For $proxy\_add\_x\_forwarded\_for;
  80. proxy\_pass http://platform-es;
  81. \}
  82. location /platform-goods/\{
  83. ssi on;
  84. ssi\_silent\_errors on;
  85. proxy\_read\_timeout 300;
  86. proxy\_set\_header Host $host;
  87. proxy\_set\_header X-Real-IP $remote\_addr;
  88. proxy\_set\_header X-Forwarded-For $proxy\_add\_x\_forwarded\_for;
  89. proxy\_pass http://platform-goods;
  90. \}
  91. location /platform-im/\{
  92. ssi on;
  93. ssi\_silent\_errors on;
  94. proxy\_read\_timeout 300;
  95. proxy\_set\_header Host $host;
  96. proxy\_set\_header X-Real-IP $remote\_addr;
  97. proxy\_set\_header X-Forwarded-For $proxy\_add\_x\_forwarded\_for;
  98. proxy\_pass http://platform-im;
  99. \}
  100. location /platform-log/\{
  101. ssi on;
  102. ssi\_silent\_errors on;
  103. proxy\_read\_timeout 300;
  104. proxy\_set\_header Host $host;
  105. proxy\_set\_header X-Real-IP $remote\_addr;
  106. proxy\_set\_header X-Forwarded-For $proxy\_add\_x\_forwarded\_for;
  107. proxy\_pass http://platform-log;
  108. \}
  109. location /platform-login/\{
  110. ssi on;
  111. ssi\_silent\_errors on;
  112. proxy\_read\_timeout 300;
  113. proxy\_set\_header Host $host;
  114. proxy\_set\_header X-Real-IP $remote\_addr;
  115. proxy\_set\_header X-Forwarded-For $proxy\_add\_x\_forwarded\_for;
  116. proxy\_pass http://platform-login;
  117. \}
  118. location /platform-mq/\{
  119. ssi on;
  120. ssi\_silent\_errors on;
  121. proxy\_read\_timeout 300;
  122. proxy\_set\_header Host $host;
  123. proxy\_set\_header X-Real-IP $remote\_addr;
  124. proxy\_set\_header X-Forwarded-For $proxy\_add\_x\_forwarded\_for;
  125. proxy\_pass http://platform-mq;
  126. \}
  127. location /platform-score/\{
  128. ssi on;
  129. ssi\_silent\_errors on;
  130. proxy\_read\_timeout 300;
  131. proxy\_set\_header Host $host;
  132. proxy\_set\_header X-Real-IP $remote\_addr;
  133. proxy\_set\_header X-Forwarded-For $proxy\_add\_x\_forwarded\_for;
  134. proxy\_pass http://platform-score;
  135. \}
  136. location /platform-task/\{
  137. ssi on;
  138. ssi\_silent\_errors on;
  139. proxy\_read\_timeout 300;
  140. proxy\_set\_header Host $host;
  141. proxy\_set\_header X-Real-IP $remote\_addr;
  142. proxy\_set\_header X-Forwarded-For $proxy\_add\_x\_forwarded\_for;
  143. proxy\_pass http://platform-task;
  144. \}
  145. location /platform-team/\{
  146. ssi on;
  147. ssi\_silent\_errors on;
  148. proxy\_read\_timeout 300;
  149. proxy\_set\_header Host $host;
  150. proxy\_set\_header X-Real-IP $remote\_addr;
  151. proxy\_set\_header X-Forwarded-For $proxy\_add\_x\_forwarded\_for;
  152. proxy\_pass http://platform-team;
  153. \}
  154. location /platform-user/\{
  155. ssi on;
  156. ssi\_silent\_errors on;
  157. proxy\_read\_timeout 300;
  158. proxy\_set\_header Host $host;
  159. proxy\_set\_header X-Real-IP $remote\_addr;
  160. proxy\_set\_header X-Forwarded-For $proxy\_add\_x\_forwarded\_for;
  161. proxy\_pass http://platform-user;
  162. \}
  163. \#error\_page 404 /404.html;
  164. \# redirect server error pages to the static page /50x.html
  165. \#
  166. error\_page 500 502 503 504 /50x.html;
  167. location = /50x.html \{
  168. root html;
  169. \}
  170. \# proxy the PHP scripts to Apache listening on 127.0.0.1:80
  171. \#
  172. \#location ~ \\.php$ \{
  173. \# proxy\_pass http://127.0.0.1;
  174. \#\}
  175. \# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  176. \#
  177. \#location ~ \\.php$ \{
  178. \# root html;
  179. \# fastcgi\_pass 127.0.0.1:9000;
  180. \# fastcgi\_index index.php;
  181. \# fastcgi\_param SCRIPT\_FILENAME /scripts$fastcgi\_script\_name;
  182. \# include fastcgi\_params;
  183. \#\}
  184. \# deny access to .htaccess files, if Apache's document root
  185. \# concurs with nginx's one
  186. \#
  187. \#location ~ /\\.ht \{
  188. \# deny all;
  189. \#\}
  190. \}
  191. \# another virtual host using mix of IP-, name-, and port-based configuration
  192. \#
  193. \#server \{
  194. \# listen 8000;
  195. \# listen somename:8080;
  196. \# server\_name somename alias another.alias;
  197. \# location / \{
  198. \# root html;
  199. \# index index.html index.htm;
  200. \# \}
  201. \#\}
  202. \# HTTPS server
  203. \#
  204. \#server \{
  205. \# listen 443 ssl;
  206. \# server\_name localhost;
  207. \# ssl\_certificate cert.pem;
  208. \# ssl\_certificate\_key cert.key;
  209. \# ssl\_session\_cache shared:SSL:1m;
  210. \# ssl\_session\_timeout 5m;
  211. \# ssl\_ciphers HIGH:!aNULL:!MD5;
  212. \# ssl\_prefer\_server\_ciphers on;
  213. \# location / \{
  214. \# root html;
  215. \# index index.html index.htm;
  216. \# \}
  217. \#\}

}

因为是为了开发调试方便,所以nginx也是window的nginx,但是window上面启动会出现很尴尬的事情,比如我双击nginx.exe,然后一闪而过。。。没有任何其它的反应,一脸懵逼,到底是启动成功还是启动失败呢,这边我教大家一个鉴别的方法。

首先我们通过start nginx命令启动一下nginx,命令输入后的效果如下所示(其实就是没有任何效果):

391_method_get-resource_shareToken_0666DC05D37C446CB17E2C046291D256_entryId_205468727

然后我们可以输入tasklist /fi “imagename eq nginx.exe”命令,来查看nginx.exe的进程是否启动

385_method_get-resource_shareToken_0666DC05D37C446CB17E2C046291D256_entryId_205468727

如果启动成功就会出现相关进程的打印信息,我们也可以通过nginx -s stop命令来停止服务,因为如果nginx服务启动的话,停止命令不会出现问题,如果服务未启动的话,那命令就会报错。

nginx服务启动

390_method_get-resource_shareToken_0666DC05D37C446CB17E2C046291D256_entryId_205468727

nignx服务未启动

387_method_get-resource_shareToken_0666DC05D37C446CB17E2C046291D256_entryId_205468727

然后我们接着来看服务重启的命令,也就是nginx -s reload

386_method_get-resource_shareToken_0666DC05D37C446CB17E2C046291D256_entryId_205468727

那如果服务启动有问题,我们应该如何来查看错误信息呢,我们可以在logs日志文件夹下面查看error.log的报错信息,所有nginx错误都会写在这个日志下面。

388_method_get-resource_shareToken_0666DC05D37C446CB17E2C046291D256_entryId_205468727

这边在给大家额外说一下我们遇到过的错误,最经常的就是nginx启动的默认端口被占用,导致启动出错。我们可以用netstat -ano | findstr 80 命令来查看这个端口被什么暂用,如果暂用的不是重要的进程,我们就可以通过taskkill /F /PID 1234来杀死这个进程,如果是系统占用的话,我们只能修改nginx默认的启动端口了。

总结:

nginx搭建和配置的过程中还是遇到过蛮多问题的,一个是端口启动被占用问题,一个是nginx启动不知道怎么去确定nginx是否启动问题。最后一个就是window下面的nginx命令不是很熟悉。好在问题都已经解决了,总之最可怕的不是问题,是有问题你还不知道。

要更多干货、技术猛料的孩子,快点拿起手机扫码关注我,我在这里等你哦~

  1. ![70][]

发表评论

表情:
评论列表 (有 0 条评论,391人围观)

还没有评论,来说两句吧...

相关阅读

    相关 nginx负载均衡反向代理

    负载均衡 负载均衡是有多台服务器以对称的方式组成一个服务器集合,每台服务器都能具有等价的地位,都可以单独对外提供服务而无需其他服务器辅助。通过某种负载分担技术,将外部发送来

    相关 nginx反向代理负载均衡

    1、正向代理 正向代理就是我们平时说的代理上网,局域网中的用户通过网关做代理访问外部的网络。 ![70][] 2、反向代理 在计算机网络中,反向代理是一种代理服

    相关 Nginx配置反向代理负载均衡

    今天给大家介绍一下如何利用Nginx进行反向代理,之所以介绍这个的原因是,因为开发的时候遇到一个很尴尬的场景。因为是springboot项目,所以每一个控制类的端口都不一样,但