前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >反向代理服务器 Nginx

反向代理服务器 Nginx

作者头像
为为为什么
发布2022-08-06 14:06:03
4920
发布2022-08-06 14:06:03
举报
文章被收录于专栏:又见苍岚又见苍岚

Nginx是一款轻量级的HTTP反向代理服务器,采用事件驱动的异步非阻塞处理方式框架,这让其具有极好的IO性能,时常用于服务端的反向代理和负载均衡。

代理

  • 代理的意思是代替某人做某事,在网络请求访问中,考虑到各种各样的因素,有时请求中间代理完成部分工作可以得到性能、安全性、可用性上的收益。
  • 在网络请求代理中,按照代理对象可以分为正向代理反向代理
正向代理
  • 代理服务器英文全称是 Proxy Server,我们一般交代的代理服务器默认为正向代理服务器,其功能就是代理网络用户去取得网络信息。
  • 形象的说:它是网络信息的中转站。在一般情况下,我们使用网络浏览器直接去连接其他Internet站点取得网络信息时,须送出Request信号来得到回答,然后对方再把信息以bit方式传送回来。代理服务器是介于浏览器和Web服务器之间的一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,Request信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。
  • 正向代理的本质 是该代理服务器 隐藏了真实的请求客户端,服务器代理了所有的客户,服务端不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替来请求。

举例来说:某些访问国外网站工具扮演的就是典型的正向代理角色。用浏览器访问 http://www.google.com 时,被残忍的block,于是你可以在国外搭建一台代理服务器,让代理帮我去请求 google.com,代理把请求返回的相应结构再返回给我。

反向代理
  • 反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。
  • 反向代理的本质隐藏了真实的服务端,代理服务器代理了所有真正的服务器,当我们请求 www.baidu.com 的时候,就像拨打10086一样,背后可能有成千上万台服务器为我们服务,但具体是哪一台,你不知道,也不需要知道,你只需要知道反向代理服务器是谁就好了,www.baidu.com 就是我们的反向代理服务器,反向代理服务器会帮我们把请求转发到真实的服务器那里去。
  • Nginx就是性能非常好的反向代理服务器,用来做负载均衡

Nginx (engine x)

读作 engine X,Nginx (engine x) 是一个高性能的轻量级HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。

Nginx采用事件驱动的异步非阻塞处理方式框架,这让其具有极好的IO性能,时常用于服务端的反向代理和负载均衡。

优点
  • 支持海量高并发:采用IO多路复用epoll。官方测试Nginx能够支持5万并发链接,实际生产环境中可以支撑2-4万并发连接数。
  • 内存消耗少:在主流的服务器中Nginx目前是内存消耗最小的了,比如我们用Nginx+PHP,在3万并发链接下,开启10个Nginx进程消耗150M内存。
  • 免费使用可以商业化:Nginx为开源软件,采用的是2-clause BSD-like协议,可以免费使用,并且可以用于商业。
  • 配置文件简单:网络和程序配置通俗易懂,即使非专业运维也能看懂。
安装与测试
  • 在 ubuntu 下可以直接 apt 安装
代码语言:javascript
复制
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install nginx

  • 查看是否安装成功
代码语言:javascript
复制
nginx -v

如果输出版本表明 nginx 安装成功

代码语言:javascript
复制
nginx version: nginx/1.18.0 (Ubuntu)
  • 一旦安装完成,Nginx 将会自动被启动。你可以运行下面的命令来验证它:
代码语言:javascript
复制
sudo systemctl status nginx

输出:

代码语言:javascript
复制
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2021-12-11 15:26:57 CST; 7min ago
       Docs: man:nginx(8)
   Main PID: 2602771 (nginx)
      Tasks: 3 (limit: 4608)
     Memory: 6.6M
     CGroup: /system.slice/nginx.service
             ├─2602771 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ├─2602772 nginx: worker process
             └─2602773 nginx: worker process

  • 访问 http://your_ip 可以看到Nginx 的加载页面
配置防火墙

现在你已经在你的服务器上安装和运行了 Nginx,你需要确保你的防火墙被配置好,允许流量通过 HTTP(80)和 HTTPS(443)端口。假设你正在使用UFW,你可以做的是启用 ‘Nginx Full’ profile

代码语言:javascript
复制
sudo ufw allow 'Nginx Full'

想要验证状态,输入:

代码语言:javascript
复制
sudo ufw status

输出将会像下面这样:

代码语言:javascript
复制
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
Nginx Full                 ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)
Nginx Full (v6)            ALLOW       Anywhere (v6)

配置文件结构
  • 所有的 Nginx 配置文件都在/etc/nginx/目录下
  • 主要的 Nginx 配置文件是/etc/nginx/nginx.conf
  • 可用配置文件在/etc/nginx/sites-available目录下
  • 使用的配置文件在/etc/nginx/sites-enabled目录下

主要有三个地方: nginx.conf , sites-available/, sites-enabled/

配置文件使用
  • 为每个域名创建一个独立的配置文件,便于维护服务器。你可以按照需要定义任意多的 block 文件
  • Nginx 服务器配置文件被储存在/etc/nginx/sites-available目录下
  • /etc/nginx/sites-enabled目录下的配置文件都将被 Nginx 使用,建议将准备使用的 sites-available 下的文件建立软链到该文件夹下
  • 如果你在域名服务器配置块中有可重用的配置段,把这些配置段摘出来,做成一小段可重用的配置。
  • Nginx 日志文件(access.log 和 error.log)定位在/var/log/nginx/目录下。推荐为每个服务器配置块,配置一个不同的accesserror
配置文件命名
  • 最佳推荐是使用标准的命名方式。例如,如果你的域名是mydomain.com,那么配置文件应该被命名为/etc/nginx/sites-available/mydomain.com.conf
网站位置
  • 你可以将你的网站根目录设置在任何你想要的地方。最常用的网站根目录位置包括:
    • /home/<user_name>/<site_name>
    • /var/www/<site_name>
    • /var/www/html/<site_name>
    • /opt/<site_name>
配置注意事项
  • 想让 nginx 监听的端口不能和其他应用冲突,不然会报错
  • server_name 为域名
  • proxy_pass 需要添加地址访问协议 (https / http)
示例配置

注意把需要向内访问的端口防火墙放开

  • 在域名解析端将二级域名 omv.zywvvd.com解析到了公网腾讯云服务器
  • 不失一般性,我们举两个例子:
    • 我们现在想要把 域名:6996 端口的请求转发到百度
    • 我们现在想要把 域名:6996/test 的请求转发到百度
  • /etc/nginx/sites-available目录下建立文件 omv.zywvvd.com.conf
  • 将上述文件在/etc/nginx/sites-enabled建立软链
  • 编辑文件内容
代码语言:javascript
复制
server {
        listen 6996;
             
        server_name omv.zywvvd.com;

        location / {
                proxy_pass https://www.baidu.com;
        }
    
        location /test{
                proxy_pass https://www.baidu.com/;
        }
}

  • 重启 nginx 服务
代码语言:javascript
复制
sudo systemctl restart nginx.service 

  • 访问 omv.zywvvd.com:6996
  • 访问 omv.zywvvd.com:6996/test

参考资料

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年12月11日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 代理
    • 正向代理
      • 反向代理
      • Nginx (engine x)
        • 优点
          • 安装与测试
            • 配置防火墙
              • 配置文件结构
                • 配置文件使用
                • 配置文件命名
                • 网站位置
              • 配置注意事项
                • 示例配置
                • 参考资料
                相关产品与服务
                负载均衡
                负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档