基于HTTP的Nginx安装和基础配置

Nginx的安装

  • 我们有了很多语言的后端服务,为什么还需要Nginx呢?
  • Nginx是目前使用最多的Web服务器,主要实现的是HTTP的相关功能
  • Nginx是一个非常纯粹的HTTP协议实现的服务,并不针对业务逻辑的开发
  • Nginx的主要功能是用于HTTP的代理,主要提供:load balancing, caching, cloud deployments等功能
  • 可使用lua来扩展相关功能
  • windows平台下载地址:https://nginx.org/en/download.html
  • mac平台安装:通过Homebrew, $ brew install nginx 会默认安装在 /usr/local/nginx/sbin
    • 或者通过https://nginx.org/en/download.html 下载,之后顺序执行
      • $ ./configure
      • $ install
      • $ make install
      • $ /usr/local/nginx/sbin/nginx -v
  • 进入安装目录,或者配置好环境变量,启动nginx
    • Mac环境:$ cd /usr/local/nginx/sbin & sudo ./nginx
    • Windows环境:$ ./nginx.exe
  • 访问 http://localhost 可以看到 Welcome to nginx! 的欢迎语,这样就成功启动了
  • 成功之后,就可以修改配置,用nginx来代理我们自己开发的服务
  • 同样的, 检查,重启和关闭
    • 检查 $ ./nginx -t
    • 重启 $ ./nginx -s reload
    • 关闭
      • 查询nginx主进程号:$ ps -ef|grep nginx
      • 正常关闭 $ sudo kill -QUIT 主进程号
      • 快速关闭 $ sudo kill -TERM 主进程号

nginx的相关功能

  • 我们使用nginx一般是来做代理功能和缓存功能,并且可以篡改HTTP请求内容
  • 我们要知道代理缓存是如何工作的,以及什么是HTTP代理
  • 在nginx/conf目录中,有一个nginx.conf文件,它是nginx配置的主文件
    • 在这个配置文件中,可以 include servers/*.conf 来启动所有配置
    • 当有新的站点需要创建时候,可以为其单独创建新的文件
    • 每个新站点可以有效的隔离管理
    • include是常用的指令,用于导入一些配置
    • 这里加单举例说明,如:servers/test.conf
      server {
          listen          80;
          server_name     test.com;
      
          location / {
              proxy_pass  http://127.0.0.1:8000;
              proxy_set_header Host $host;
          }
      }
      
      server {
          listen          80;
          server_name     a.test.com;
      
          location / {
              proxy_pass  http://127.0.0.1:8000;
              proxy_set_header Host $host;
          }
      }
      
      server {
          listen          80;
          server_name     b.test.com;
      
          location / {
              proxy_pass  http://127.0.0.1:8000;
              proxy_set_header Host $host;
          }
      }
      
    • 同时,本地也要进行一些host的配置, 比如在Mac上$sudo vi /etc/hosts
      http://127.0.0.1       test.com
      http://127.0.0.1       a.test.com
      http://127.0.0.1       b.test.com
      
    • 其主要功能是在本地开启三个代理
      • server 表示在本地开启一个服务
      • listen 80 表示监听80端口
      • server_name 表示在浏览器中访问的host name
        • 它会根据访问的host name,来判断把服务启动在什么地方,返回什么内容,代理到哪个地方
      • location 表示访问路径
        • proxy_pass 表示代理的具体服务地址
          • 配置到这一步代理已经成功了
          • proxy_pass 设置了什么,默认其host就是什么
        • proxy_set_header 表示修改代理的HTTP头
          • proxy_set_header Host $host 表示经过代理之后修改host为配置的host
          • 加上这个,如果你访问test.com时,其host就是test.com
          • 不加这个,如果你访问test.com时候,其host就是http://127.0.0.1:8000
          • 可以针对这个不同的nginx配置,在node服务中添加console.log(request.headers.host)进行验证
          • 在不同配置验证的时候,注意进行重启nginx操作:$sudo nginx -s reload
          • 从这里可以看出nginx可以修改请求的内容,浏览器发送请求到nginx
          • nginx这边进行转发,也就是nginx发起了一个http的请求,发送到我们实际的服务器
          • 作为发起方,nginx认为的host就是我们设置的proxy_pass
          • 作为开发者,我们拿到host希望拿到浏览器给我们的host,而非我们自己的host
          • 我们就要加上这个proxy_set_header Host $host
          • 而这个$host就是nginx中的一个变量,这个变量是请求中带过来的host
          • 这样设置,请求中是什么host,就是什么host, nginx中有很多变量,此处不再赘述
          • 由此可见,中间代理可以做任何它想做的任何事情,比如我们上网的时候,可能会看到的一些网络服务商插入的广告
          • 而http传输是明文都是不可靠的,https传输是加密,如果是https协议传输,那么代理则无法做任何修改
          • 服务端使用不同host是为了区分我们的访问域名的,nginx是通过请求中的host来判断请求是要代理到什么地方
    • 上面例子的是将不同的域名都配置到了同一个端口80,其所有请求都到了本机的http://127.0.0.1:8000服务
    • 这样一台物理机器就可以跑几个不同的服务,这样可以更高效利用计算机
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值