Nginx 从入门到实践

Posted 思想累积

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx 从入门到实践相关的知识,希望对你有一定的参考价值。

1、nginx 简介

1.1 什么是 Nginx

nginx 中文文档:https://www.nginx.cn/doc/

Nginx 是一个高性能的 Http 和反向代理的 web 服务器,提供了 IMAP/POP3/SMTP 服务

Nginx特点是占有内存少,并发能力强,安装简单,配置文件简洁

1.2 反向代理

  • 正向代理:在客户端(浏览器)配置代理服务器,通过代理服务器访问网络
  • 反向代理:客户端发送请求到反向代理服务器,反向代理服务器选择目标服务器获取数据后,返回给客户端,客户端请求的是代理服务器的地址,隐藏了真实服务器的 IP 地址

1.3 负载均衡

客户端发送多个请求到服务器,服务器处理请求,有一些可能与数据库交互,服务器处理完毕后将结果返回给客户端

单个服务器解决不了,我们增加服务器的数量,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,就是我们所说的负载均衡

1.4 动静分离

为了加快网站解析速度,把动态资源和静态资源分开由不同的服务器解析,加快解析速度,降低原来单个服务器的压力

2、Linux 下 Nginx 安装

nginx 下载地址:http://nginx.org/en/download.html

# 安装 make:
yum -y install gcc automake autoconf libtool make

# 安装 g++:
yum install gcc gcc-c++

# 切换到要安装的目录
cd /home/Nginx

##################################################
# https://ftp.pcre.org/pub/pcre/ 下载最新的 PCRE 源码包
wget https://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz
tar -zxvf pcre-8.44.tar.gz
cd pcre-8.44
./configure
make
make install
# 检查是否安装
pcre-config --version
##################################################
# http://zlib.net/zlib-1.2.11.tar.gz 下载最新的 zlib 源码包使用以下命令进行安装
wget http://zlib.net/zlib-1.2.11.tar.gz
tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure
make
make install

# 安装 Nginx
wget http://nginx.org/download/nginx-1.18.0.tar.gz
tar -zxvf nginx-1.18.0.tar.gz

# 进入解压文件夹后
./configure
make && make install

3、Nginx 常用命令

进入 nginx 下 sbin 目录

  • 查看版本号:./nginx -v
  • 启动:进入 sbin 目录下 ./nginx
  • 关闭:./nginx -s stop
  • 重新加载:./nginx -s reload

4、Nginx 配置文件

4.1 Nginx 配置文件位置

进入安装目录下 conf 目录下,找到 nginx.conf

4.2 Nginx 配置文件组成

Nginx 配置文件有三部分组成

  • 全局块
    • 配置文件从开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令
user  root root;
# 并发处理的数量
worker_processes auto;
error_log  /home/nginx/nginx_error.log  crit;
pid        /home/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200
  • events 块
    • 影响 Nginx 服务器与用户的网络连接
events
    {
    use epoll;
    # Nginx 支持的最大连接数
    worker_connections 51200;
    multi_accept on;
    }
  • http 全局块
    • 包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求上限数
http
    {
        include       mime.types;
		#include luawaf.conf;

		include proxy.conf;

        default_type  application/octet-stream;

        server_names_hash_bucket_size 512;
        client_header_buffer_size 32k;
        large_client_header_buffers 4 32k;
        client_max_body_size 50m;

        sendfile   on;
        tcp_nopush on;

        keepalive_timeout 60;

        tcp_nodelay on;

        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
        fastcgi_buffer_size 64k;
        fastcgi_buffers 4 64k;
        fastcgi_busy_buffers_size 128k;
        fastcgi_temp_file_write_size 256k;
		fastcgi_intercept_errors on;

        gzip on;
        gzip_min_length  1k;
        gzip_buffers     4 16k;
        gzip_http_version 1.1;
        gzip_comp_level 2;
        gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml;
        gzip_vary on;
        gzip_proxied   expired no-cache no-store private auth;
        gzip_disable   "MSIE [1-6]\\.";

        limit_conn_zone $binary_remote_addr zone=perip:10m;
		limit_conn_zone $server_name zone=perserver:10m;

        server_tokens off;
        access_log off;

server
    {
    	# 监听的端口号
        listen 9000;
        server_name 127.0.0.1;
        index index.html index.htm index.php;
        root  /home/nginx/html;

        #error_page   404   /404.html;
        include enable-php.conf;

        location ~ .*\\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }

        location ~ .*\\.(js|css)?$
        {
            expires      12h;
        }

        location ~ /\\.
        {
            deny all;
        }

        access_log  /home/nginx/logs/access.log;
    }
include /home/nginx/panel/vhost/nginx/*.conf;
}

5、Nginx 配置实例

首先在 Linux 系统安装 Tomcat,使用默认端口 8080

5.1 反向代理配置

使用 Nginx 反向代理,根据访问的路径跳转到不同端口的服务中

安装两个 Tomcat 服务器,一个在 8080 端口,一个在 8081 端口,创建好文件夹和测试页面

具体配置

在 Nginx 配置文件中进行配置

server
    {
        listen 9000;
        server_name 192.168.31.219;

        location ~ /tomcat1/ {
                proxy_pass http://127.0.0.1:8080;
        }

        location ~ /tomcat2/ {
                proxy_pass http://127.0.0.1:8082;
        }
}

location 指令说明

location [= | ~ | ~* | ^~]{
}
  • =:不含正则表达式的 URI 前,请求字符串需要与 URI 严格匹配,匹配成功处理请求
  • ~:表示 URI 包含正则表达式,并且区分大小写
  • ~*:表示 URI 包含正则表达式,不区分大小写
  • ^~:不包含正则表达式的 URI 前,Nginx 找到标识 URI 和请求字符串匹配程度最高的 location,使用该 location 处理请求

URI 包含正则表达式,必须要有 ~ 或者 ~* 标识

5.2 负载均衡配置

添加 upstream

upstream myserver {
			server 192.168.31.219:8080 weight=5;
	        server 192.168.31.219:8082 weight=10;
		}
server
    {
        listen 9000;
        server_name 192.168.31.219;

        location ~ /tomcat/ {
                proxy_pass http://myserver;
        }
}

Nginx 负载均衡策略

  • 轮询(默认):每个请求按时间顺序逐一分配到不同的服务器
  • weight:权重越高被分配的客户端越多
    • 在 IP 后添加 weight = ?;
  • ip_hash:每个请求按照 IP 的 hash 分配固定的服务器
    • 在upstream 中添加 ip_hash;
  • fair:按照服务器的相应时间来分配请求,相应时间短的优先分配

5.3 Nginx 动静分离配置

location /image/ {
		root /www/server/nginx/html;
		# 列出目录
		autoindex on;
		expires      12h;
        }

5.4 Nginx 高可用配置

在两台服务器上安装 nginx 和 keepalive

yum -y install keepalived
# 安装之后再 etc 文件下生成 keepalived 文件
cd /etc/keepalived/

keepalive 配置文件

! Configuration File for keepalived
# 全局定义
global_defs {
	# email 通知,发生故障发送到邮箱
   notification_email {
     10086@qq.com
   }
   # 指定发件人
   notification_email_from Alexandre.Cassen@firewall.loc
   # 指定 smtp 服务器地址
   smtp_server 0.0.0.0
   # 连接超时时间
   smtp_connect_timeout 30
   # 运行 keepalives 的标识
   router_id LVS_DEVEL
}

# 脚本
vrrp_script chk_http_port {
	# 脚本地址
	script ""
	# 检测脚本执行间隔
	interval 2
	# 权重
	weight -20
}

# 虚拟 IP 配置
vrrp_instance VI_1 {
	# 备份网上服务器将 MASTER 改为 BACKUP
    state MASTER	
    # 网卡
    interface eth0	
    # 主、备机的 virtual_router_id 必须相同
    virtual_router_id 51	
    # 主备机不同的优先级,主机值大
    priority 100	
    # 检查间隔,默认 1 秒
    advert_int 1
    # 设置认证
    authentication {
    	# 认证方式
        auth_type PASS
        # 密码
        auth_pass 1111
    }
    # 虚拟地址
    virtual_ipaddress {	
        192.168.200.16
    }
}

# 虚拟服务器,IP 与 virtual_ipaddress 地址一致
virtual_server 192.168.200.16 443 {
	# 检查时间间隔
    delay_loop 6
    # VS 调度算法 rr|wrr|lc|wlc|lblc|sh|dh
    lb_algo rr
    # 负载均衡转发规则 NAT|DR|RUN
    lb_kind NAT
    # 会话保持时间
    persistence_timeout 50
    # 协议
    protocol TCP

	# 真实 IP 地址
    real_server 0.0.0.0 443 {
    	# 默认 1,为 0失效
        weight 1
        SSL_GET {
            url {
              path /
              digest ff20ad2481f97b1754ef3e12ecd3a9cc
            }
            url {
              path /mrtg/
              digest 9b3a0c85a887a256d6939da88aabd8cd
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

以上是关于Nginx 从入门到实践的主要内容,如果未能解决你的问题,请参考以下文章

Nginx从入门到实践

Nginx 从入门到实践

Nginx视频教程之Nginx从入门到实践

Nginx | 万字文章助你从入门到实践!

nginx从入门到实践-基础篇

10 Python编程:从入门到实践---异常处理进阶