【服务器】Nginx + 反向代理 + 负载均衡 + Session Cookie

本文介绍了Nginx作为反向代理和负载均衡服务器的配置与实践,包括如何实现反向代理,配置负载均衡的轮询、权重策略,以及解决Session一致性问题的方法,如Session粘滞、复制和共享。同时,文章讨论了Nginx的配置文件、启动和停止命令,以及可能出现的报错和解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意:nginx一旦改动了配置,都需要重启才能看到更新!!
————————
下载地址/usr/local/Cellar/nginx
核心配置文件 nginx.conf/usr/local/etc/nginx/nginx.conf
————————

  • 启动
    cd /usr/local/Cellar/nginx/1.15.12/bin
    输入:nginx 或者 sudo ./nginx

若:启动失败,会返回:

nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use)
...
nginx: [emerg] still could not bind()

说明8080端口已被占用;
查看此端口被谁占用:$ lsof -i:8080

COMMAND   PID USER   FD   TYPE            DEVICE SIZE/OFF NODE NAME
java    25882 xxxx   50u  IPv6 0x4b841ab353081bd      0t0  TCP *:http-alt (LISTEN)

杀掉此PID:$ kill 25882
再启动nginx:nginx

若:启动成功,会无返回;

浏览器查看:localhost:8080
————————

  • 停止:
    查看进程:ps -ef|grep nginx,返回:
  501 68108     1   0 20May19 ??         0:00.01 nginx: master process /usr/local/opt/nginx/bin/nginx -g daemon off;  
  501 68111 68108   0 20May19 ??         0:00.01 nginx: worker process  
  501 25813 25806   0  2:36PM ttys000    0:00.01 grep nginx

注意查看,第一行nginx: master的进程号是:68108
在终端中输入以下几种命令都可以停止:
Kill -QUIT 进程号 (从容的停止,即不会立刻停止)
Kill -TERM 进程号 (立刻停止)
Kill -INT 进程号 (立刻停止)

NginX

Nginx 是一个高性能的 HTTP 和反向代理服务器,同时也是一个 IMAP/POP3/SMTP 代理服务器。
由俄罗斯程序师Igor Sysoev所开发,官方支持5W并发链接,且CPU、内存消耗非常低,运行非常稳定;(流量超大公司才合适使用NginX,如alibaba)

作用:

  1. HTTP服务器(类似的有:Tomcat);
    网页静态服务器(如果我们将网页一静态化的形式呈现,就可以使用Nginx这样高性能的web服务器来部署,它可以承载5W的并发;而Tomcat只有几百并发;
  2. 虚拟主机(网站空间):可以实现在一台服务器虚拟出多个网站(例如个人网站使用的虚拟主机)
    他就像仓库一样,网站信息在网络中需要有存放的地方,通常企业做网站都不会自己架服务器,而是选择以虚拟主机空间做为放置网站内容的网站空间。
    小型网站空间 - 虚拟主机
    中型网站空间 - VPS主机
    大型网站空间 - 服务器
  3. 反向代理、负载均衡:当网站的访问量达到一定程度后,单台服务器不能满足用户的请求,需要多台服务器集群可以使用Nginx做反向代理,而且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机

正向代理 & 反向代理

在这里插入图片描述
在这里插入图片描述


NginX + Tomcat 实现反向代理

在这里插入图片描述

使用nginx同一端口根据不同域名转发到不同端口:

需求:在一台服务器上部署两个Tomcat项目,都想共用同一个端口号80;但是一台服务器Tomcat端口号不能重复,那么这个问题如何解决?

答:使用NginX,同一端口根据不同域名转发到不同端口;

可以在本地启动两个Tomcat,两个Tomcat端口号分别为8081和8082,一个nginx端口号为80;
分别访问两个Tomcat和nginx:
Tomcat 1 端口号:8081,访问地址:127.0.0.1:8081
Tomcat 2 端口号:8082,访问地址:127.0.0.1:8082
再用nginx实现反向代理;

输出8081.chiu.com,跳转到127.0.0.1:8081
输出8082.chiu.com,跳转到127.0.0.1:8082
有点奇怪,这两个URL都没写端口,应该是默认8080,但却跳到了两个端口;

实现 反向代理:
可能需要配合文章:TOMCAT
https://blog.youkuaiyun.com/weixin_42915286/article/details/84108532

  • 1.先复制两个TOMCAT服务器,他们分别为:
    Tomcat 8081Tomcat 8082
    ————————
    (1).分别修改他们conf - Server.xml中的三个端口号;
新TOMCAT 1 ————————————————————

<Server port="8005" shutdown="SHUTDOWN"> 8085 改成 8086
<Connector port="8080" protocol="HTTP/1.1" 8080 改成 8081
<Connector port="8009" protocol="AJP/1.3" 8009 改成 8010

新TOMCAT 2 ————————————————————

<Server port="8005" shutdown="SHUTDOWN"> 8085 改成 8087
<Connector port="8080" protocol="HTTP/1.1" 8080 改成 8082
<Connector port="8009" protocol="AJP/1.3" 8009 改成 8011

若不修改端口,则两个服务器会保留了同样的端口,第一个服务器启动后,第二个服务器会无法启动;

(2).分别修改他们浏览器中的静态页面:
(这个步骤的意思是:本来某Tomcat服务器登录成功后,浏览器访问localhost:端口号,会返回一个jsp页面,里面有Tomcat的Logo和配置信息;这些信息就是ROOT文件夹的内容;我们把它删掉,用一行html文字作为浏览器对于Tomcat登录成功的返回页面)
webapps - ROOT中的内容删光,分别新建一个.txt文件,内容比如为:<h1>This is the Server of 8081</h1>,再把他的后缀改成.html
用来区分8081和8082服务器;
注意!此.html一定要命名为index.html,其他名字会让其不能被识别!!

配置完成后,启动8081和8082的bin - startup.sh
然后,浏览器分别访问:
localhost:8081
localhost:8082
分别可以见到
This is the Server of 8081.
This is the Server of 8082.
————————

  • 2.配置本地域名,实现URL跳转
    比如我想实现如下效果:
    输出8081.chiu.com,跳转到127.0.0.1:8081
    输出8082.chiu.com,跳转到127.0.0.1:8082
    ————————
    进入本地HOST文件(作用:做DNS解析)配置本地域名,添加:
127.0.0.1  8081.chiu.com
127.0.0.1  8082.chiu.com

然后在浏览器分别访问:
http://8081.chiu.com:8081/
http://8082.chiu.com:8082/
访问成功;
————————————————
但,这时我们想 免输入端口号 来访问:

  • (3). 配置 NginX 反向代理
    nginx.conf中把server port改成80;(若光改此文件无效的话,试试也改下nginx.conf.default)
    浏览器输入127.0.0.1(不输入端口号)访问看看
    (nginx配置修改后,都要重启一次才生效)
    ————————
    nginx.conf中这一行server{...}删除(虚拟主机),新写一个虚拟主机:
    这段话意思是:浏览器输入server_name后,地址会重定向到proxy_pass
server {
        listen       80;
        server_name  8081.chiu.com;
        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass http://127.0.0.1:8081; 
            proxy_redirect default;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }

(nginx每一次更新配置后都要重启)
这样,在浏览器输入8081.chiu.com得到的页面 = localhost:8081的页面;

那么8082呢?新增一份:

    server {
        listen       80;
        server_name  8082.chiu.com;
        #charset koi8-r;

        #access_log  l
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值