Nginx

2022-10-25 15:50:20 浏览数 (2)

Nginx

  • 一、Nginx背景介绍
  • 二、Mac下安装Nginx
  • 三、Nginx简单配置
  • 四、反向代理
    • 1.1 正向代理
    • 1.2 正向代理的作用
    • 2.1 反向代理
    • 2.2 反向代理的作用
    • 2.3 安全性的区别:
    • 3. 反向代理服务器的工作原理:
    • 4. 统计访问量
  • 五、报错汇总
    • 1. 错误提示 nginx: [emerg] unknown directive "gzip_static" 或者 nginx: [emerg] https protocol requires SSL support
    • 2. 502/504
  • 六、参考资料:

一、Nginx背景介绍

服务器架构集群(分布式服务器架构):多台服务器组成的相应大并发、高数量访问的架构系统。 特点:成本高; 降低单台服务器压力,使流量平均分配到多台服务器; 使网络服务架构更加稳定。

优点: (1)热部署:Nginx在修改配置文件之后,不需要重启、重载操作; (2)高并发连接:相同配置下,比apache能接受的连接数要多很多; (3)低内存消耗:相比apache; (4)处理响应请求很快:Nginx处理静态文件响应速度很快; (5)高可靠性。

二、Mac下安装Nginx

安装命令:

代码语言:javascript复制
# 需要安装有brew
brew update
brew search nginx
brew info nginx
brew install nginx

网站根目录为html(即/usr/local/var/www)。 重要文件所在的目录:

代码语言:javascript复制
MAC OS
# 配置文件nginx.conf所在目录
open /usr/local/etc/nginx/
# nginx安装到的目录
open /usr/local/Cellar/nginx  
# nginx启动文件所在目录
open /usr/local/Cellar/nginx/${版本号}/bin

Linux
# Nginx 配置文件的路径:/etc/nginx/nginx.conf
# Nginx 存放静态资源的路径:/usr/share/nginx/html/
# Nginx 启动命令的路径:/usr/sbin/nginx

三、Nginx简单配置

  1. 简单命令
代码语言:javascript复制
# 检查配置
sudo nginx -t
# 重载配置
sudo nginx -s reload
# 启动 nginx 
sudo nginx
sudo nginx -c ${config-file-path}
# 停止nginx 
sudo nginx -s stop

# 查看linux运行情况
systemctl status | grep nginx
  1. 负载均衡(七种)
代码语言:javascript复制
#负载均衡(还有最小连接数、fair模块、一致性算法)
upstream myloadbalance {
    #默认是轮寻方法
    #ip_hash、url_hash
    server 127.0.0.1:9001 max_fails=3 fail_timeout=30s weight=2;
    server 127.0.0.1:9002 max_fails=3 fail_timeout=30s weight=2;
}

server { 
	...
  1. 反向代理
代码语言:javascript复制
server {
	#反向代理/跨域
    #ajax可以通过访问url:"/apis/apistest/test"来获取url
    location /api/ {
        #访问localhost:9010会	反向代理到proxy_pass指定的目标服务器
        #将我们的请求通过proxy_pass反向代理到目标服务器上
        #root http;
        #若改为http://myloadbalance/api/,反向代理得到的由http:xxx/api/yyy变为http:xxx/yyy
        proxy_pass http://myloadbalance/api;
        #try_files $uri $uri/ /index.html =404;
    }

}

四、反向代理

用户(客户端) 代理服务器proxy(正/反) 提供者(服务端) 注意: 代理(这家餐厅的服务员)需要配置(在这家餐厅任职),而反向代理(这家餐厅的服务员)不需要配置(不需要在隔壁餐厅任职)。

1.1 正向代理

代码语言:javascript复制
顾客(客户端)去餐厅吃饭,点了一盘红烧肉(请求),菜需要大厨(服务端)来做。可是大厨在厨房,只能通过服务员(代理)来告诉大厨某某顾客点了一盘红烧肉。然后等大厨做出了红烧肉,再由服务员拿到顾客面前。 

(1)需要进行特别的设置(配置),客户端必须非常明确访问的服务器地址,服务器不清楚是哪个客户端。 (2)代理(欺骗的)的是客户端

1.2 正向代理的作用

(1)V**,访问原来无法访问的资源,如Google (2)可以做缓存,加速访问资源 (3)对客户端访问授权,上网进行认证 (4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

2.1 反向代理

代码语言:javascript复制
顾客(客户端)去餐厅吃饭,点了一盘大闸蟹(请求),可是这个餐厅的大厨(服务端A)做不了,可是隔壁餐厅的大厨(服务端B)可以做。正巧,这家餐厅的服务员(代理)与隔壁餐厅的大厨(服务端B)有交集,于是这家餐厅的服务员(反向代理)去告诉隔壁餐厅的大厨(服务端B),让他帮忙做一盘大闸蟹。待隔壁大厨做好之后,这家餐厅的服务员(反向代理)将大闸蟹拿到顾客(客户端)面前。 

(1)不需要进行配置,客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端。 (2)代理的是服务器

2.2 反向代理的作用

保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网 ; 负载均衡,通过反向代理服务器来优化网站的负载 。

(1)提供防火墙后面的服务给Internet用户; (2)为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。; (3)可以启用高级URL策略和管理技术,从而使处于不同web服务器系统的web页面同时存在于同一个URL空间下。

2.3 安全性的区别:

(1)正向代理允许客户端通过它访问任意网站并且隐藏客户端自身; (2)反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。

3. 反向代理服务器的工作原理:

  1. 作为内容服务器的替身 如果内容服务器返回错误消息,代理服务器会先行截取该消息并更改标头中列出的任何 URL,然后再将消息发送给客户机。如此可防止外部客户机获取内部内容服务器的重定向 URL。 代理服务器就在安全数据库和可能的恶意攻击之间提供了又一道屏障,防火墙通路只允许代理服务器有权进行访问,其他用户均未授权。
  2. 作为内容服务器的负载均衡器 对于客户机发往真正服务器的请求,代理服务器起着中间调停者的作用。代理服务器会将所请求的文档存入高速缓存。如果有不止一个代理服务器,DNS 可以采用“循环复用法”选择其 IP 地址,随机地为请求选择路由。客户机每次都使用同一个 URL,但请求所采取的路由每次都可能经过不同的代理服务器。

4. 统计访问量

PV(Page View):即页面浏览量或者点击量,用户每一次对网站中每个页面访问均记录1个PV。用户对同一页面的多次访问,访问量累积。

UV(Unique Visitor):指通过互联网浏览这个网页的人,电脑称为一个访客、手机也称为一个访客,一天之内相同的客户端只能被计算一次。

代码语言:javascript复制
1.根据访问IP统计UV
awk '{print $1}'  /var/log/nginx/access.log|sort | uniq -c |wc -l

2.统计访问URL统计PV
awk '{print $7}' /var/log/nginx/access.log|wc -l

五、报错汇总

1. 错误提示 nginx: [emerg] unknown directive “gzip_static” 或者 nginx: [emerg] https protocol requires SSL support

代码语言:javascript复制
# 重新编译nginx
./configure --prefix=${nginx_install_path} --with-http_stub_status_module --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module

make && make install

2. 502/504

超时时间

六、参考资料:

nginx location正则 Nginx

0 人点赞