1.nginx学习
阅读原文时间:2023年07月09日阅读:1

我们平时访问的网络网站就是WEB网络服务,允许用户通过浏览器访问互联网中的各种资源服务

WEB服务器会通过HTTP或者HTTPS的方式将请求内容传递给客户端

目前常见的WEB服务有IIS, Nginx和Apache等

WEB服务器和WEB框架的区别

WEB服务器:接收HTTP请求并返回数据
WEB框架:开发WEB应用程序,处理接收到的HTTP请求

Nginx特点:

  • 开源免费

  • 高性能,高并发

    • 支持几万并发连接

    • 资源消耗少,在3万并发连接下开启10个nginx线程消耗的内存不到200M

  • 安装灵活,使用方便

  • 功能丰富

    • 反向代理

    • 负载均衡

    • 缓存服务

    • 访问日志

1.安装

nginx 官方nginx
tenginx 淘宝nginx

这2个一模一样,我这里采用后者,并且采用源代码安装

  • 下载源代码

    wget http://tengine.taobao.org/download/tengine-2.3.2.tar.gz

  • 解压缩

    tar -zxvf tengine-2.3.2.tar.gz

  • 指定安装目录,检查编译环境
    先更新本地依赖页

    sudo apt-get update
    sudo apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev libssl-dev libxslt1-dev libxml2-dev libgeoip-dev libperl-dev libtool
    sudo apt-get install openssl

    ./configure --prefix=/opt/tng232

  • make进行编译

    sudo make

  • 生成可执行文件

    sudo make install

  • 配置环境变量

    sudo vim /etc/profile

    PATH="/opt/python390/bin/:/opt/tng232/sbin:/home/parallels/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"

    source /etc/profile

2.常用命令

  • 第一次启动

    nginx -c /../nginx.conf # 指定启动的配置文件,不指定nginx会自动加载默认路径的配置文件

  • 平滑启动

    sudo nginx -s reload -c /opt/tng232/conf/nginx.conf # 平滑启动,重新读取nginx配置文件,不重启nginx进程

  • 停止进程

    nginx -s stop -c /opt/tng232/conf/nginx.conf # 停止nginx进程

  • 检查Nginx配置文件语法

    nginx -t -c /opt/tng232/conf/nginx.conf

启动后可以访问

http://10.211.55.5:80

3.学习配置文件

配置文件在nginx安装的conf目录

nginx的配置文件是C语言风格的, 以 ;结束每一行的配置
配置文件是以代码块的形式编写的
主要有以下几个模块

http{} # 里面定义了多个代码块,是nginx的核心配置点
server{} # 虚拟主机代码块,定义了监听端口等
location{} # 域名匹配代码块

#user nobody;

定义nginx的工作进程数 以CPU核数为准

worker_processes 5;

以下是日志功能

error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#error_log "pipe:rollback logs/error_log interval=1d baknum=7 maxsize=2G";

将pid写入文件中

pid logs/nginx.pid;

events {
# 每个worker进程支持的最大连接数
worker_connections 1024;
}

配置文件的核心区域

http {
include mime.types;
default_type application/octet-stream;
# 打开nginx的访问日志功能
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access\_log  logs/access.log  main;  
#access\_log  "pipe:rollback logs/access\_log interval=1d baknum=7 maxsize=2G"  main;

sendfile        on;  
#tcp\_nopush     on;

#keepalive\_timeout  0;  
keepalive\_timeout  65;

# 打开此功能,能够极大的提升网站访问,以及静态资源压缩  
gzip  on;

# 虚拟主机的核心配置  
server1 {  
    listen       80;  
    server\_name  localhost;

    # nginx编码支持  
    charset utf-8  
    #charset koi8-r;

    #access\_log  logs/host.access.log  main;  
    #access\_log  "pipe:rollback logs/host.access\_log interval=1d baknum=7 maxsize=2G"  main;

    # nginx的域名匹配,所有的请求,都会进入到这里  
    location / {  
        # 定义该虚拟主机资料存放路径,可以自由修改  
        root   html;  
        # 定义nginx首页文件名字,需要在root指定的目录下  
         index  index.html index.htm;  
    }

    #error\_page  404        /404.html;

    # redirect server error pages to the static page /50x.html  
    error\_page   500 502 503 504  /50x.html;  
    location = /50x.html {  
        root   html;  
    }  
}  
# 可以定义第二个虚拟主机的配置  
server2 {  
    listen       90;  
    server\_name  localhost;

    # nginx编码支持  
    charset utf-8

    # nginx的域名匹配,所有的请求,都会进入到这里  
    location / {  
        # 定义该虚拟主机资料存放路径,可以自由修改  
        root   html;  
        # 定义nginx首页文件名字,需要在root指定的目录下  
         index  index.html index.htm;  
    }

    #error\_page  404              /404.html;

    # redirect server error pages to the static page /50x.html  
    #  
    error\_page   500 502 503 504  /50x.html;  
    location = /50x.html {  
        root   html;  
    }  
}  

}

4.nginx多站点功能

nginx的web站点也称为nginx的虚拟主机站点,通过文件目录的不同,定义多个不同的网站

多虚拟主机的实现方式

  • 基于域名的多虚拟主机

    修改hosts文件,强制写入域名对应关系,比较麻烦

  • 基于端口的虚拟主机

    修改nginx.conf的端口配置,定义两个server与区块,如下

    # 目前这里是第一个server {} 区域块,端口是85
    server {
    # 定义该网站的端口
    listen 85;
    server_name localhost;
    charset utf-8;
    location / {
    root /python/;
    index index.html index.htm;
    }
    }

    # 目前这里是第二个server {} 区域块,端口是85  
    server {  
        # 定义该网站的端口  
        listen      89;  
        server\_name  localhost;  
        charset utf-8;  
        location / {  
            root   /linux/;  
            index  index.html index.htm;  
        }  
    }
  • 基于IP的虚拟主机 通过不同的IP区分不同的虚拟主机,此类比较少见,一般业务需要多IP的常见都会在负载均衡中绑定

5.nginx日志

日志作用

nginx的方可日志,能够记录,分析用户的请求行为
-什么时间点,访问的最频繁,比如某网站,网站的流量,基本都在晚上,学生下了班,在线学习各种技术
-记录用户的请求频率,以此检测是否是爬虫等恶意请求,进行封禁。

操作

改nginx.conf 在 http{}代码块中,打开如下注释即可

#打开此nginx的访问日志功能,即可查看日志  
log\_format  main  '$remote\_addr - $remote\_user \[$time\_local\] "$request" '  
                  '$status $body\_bytes\_sent "$http\_referer" '  
                  '"$http\_user\_agent" "$http\_x\_forwarded\_for"';

access\_log  logs/access.log  main;

日志变量解释
$remote_addr 记录客户端ip
$remote_user 远程用户,没有就是 “-”
$time_local    对应[14/Aug/2018:18:46:52 +0800]
$request     对应请求信息"GET /favicon.ico HTTP/1.1"
$status     状态码
$body_bytes_sent  571字节 请求体的大小
$http_referer  对应“-”  由于是直接输入浏览器就是 -
$http_user_agent  客户端身份信息,以此可以nginx判断,用户客户端是手机浏览器,就转发移动端页面给与用户
如果是pc的客户端,就转发给pc页面给与用查看

6.反向代理

正向代理,代理的是客户端

反向代理,代理的是服务端

nginx反向代理的操作:

第一个server{}标签,用于反向代理的作用,修改nginx.conf如下

#   第一个虚拟主机的配置,作用是反向代理了  
server {  
    listen       80;  
    server\_name  localhost;  
    charset utf-8;  
    error\_page  404  /40x.html;  
    # 如果你写的是proxy\_pass参数,就是一个请求转发,反向代理功能  
    location / {  
    proxy\_pass  http://192.168.178.140:90;  
    }

}

第二个server{}标签,作用是返回机器上的资料,也就是一个web站点的功能

#第二个虚拟主机,作用是web站点功能,资源服务器,提供页面的
server {
listen 90;
server_name _;
location / {
root /s25proxy/;
index index.html;
}
}

7.负载均衡

负载均衡就是将请求均衡的分给不通的web服务端

负载均衡的搭建

第一个虚拟主机server{}的作用,是反向代理,80端口

# 用upstream关键词定义负载均衡池,写入资源服务器的地址  
# 负载均衡的算法,默认是轮询机制,一台服务器处理一次  
upstream  s25real\_server  {  
        server   192.168.178.140:90;  
        server  192.168.178.140:95;  
    }  
server {  
    listen       80;  
    server\_name  localhost;  
    charset utf-8;  
    error\_page  404  /40x.html;  
    location / {  
     proxy\_pass  http://s25real\_server;  
    }

}

第二个server{}标签的配置,作用是提供资源给用户看的,90端口

#第二个虚拟主机,作用是web站点功能,资源服务器,提供页面的
server {
listen 90;
server_name _;
location / {
root /s25lol/;
index index.html;
}
}

第三个server{}标签的作用,同样是返回资源页面,查看负载均衡效果的,95端口

#第三个server{}虚拟主机,作用是 提供资源服务器的内容的
server {
listen 95;
server_name _;
location / {
root /s25dnf/;
index index.html;

  }  

}

nginx负载均衡算法

- 轮询机制:默认的,每台服务器各一次

- 加权轮训机制

upstream  s25real\_server  {  

server 192.168.178.140:90 weight=4;
server 192.168.178.140:95 weight=1;
}

8.搭建文件服务器

server {
listen 80;
server_name localhost;

    #charset koi8-r;

    #access\_log  logs/host.access.log  main;  
    #access\_log  "pipe:rollback logs/host.access\_log interval=1d baknum=7 maxsize=2G"  main;

    location / {  
        root   /opt/tng232/download;  
        autoindex on; # 索引,开启目录文件列表  
        autoindex\_exact\_size on; # 显示文件大小  
        autoindex\_localtime on; # 显示文件时间  
    }  
 }