我与Nginx的不解之缘

简介: 我与Nginx的不解之缘

在这里插入图片描述

  • Nginx 是高性能的 HTTP 和反向代理的web服务器,处理高并发能力是十分强大的,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数。
  • 其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

一、安装(准备一台虚拟机)

1.环境准备

安装gcc环境

yum install gcc-c++

第三方的开发包

(1) PCRE

PCRE(Perl Compatible Regular Expressions)是一个 Perl 库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库。
yum install -y pcre pcre-devel

注:pcre-devel 是使用 pcre 开发的一个二次开发库。nginx 也需要此库。

(2)zlib

zlib 库提供了很多种压缩和解压缩的方式,nginx 使用 zlib 对 http 包的内容进行 gzip,所以需要在 linux 上安装 zlib 库。
yum install -y zlib zlib-devel

(3)OpenSSL

OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。nginx 不仅支持 http 协议,还支持 https(即在 ssl 协议上传输 http),所以需要在 linux安装 openssl 库。
yum install -y openssl openssl-devel

2.Nginx下载

官网

小航使用的版本是 1.8.0 版本

也可以通过命令

wget http://nginx.org/download/nginx-1.18.0.tar.gz

3.Nginx安装

// 解压
tar zxvf nginx-1.8.0.tar.gz

进入nginx-1.8.0目录,使用 configure 命令创建一 makeFile 文件
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi

编译、安装:

make && make install

Tips:Makefile文件

Makefile是一种配置文件, Makefile 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。

注解版:

configure参数
./configure \
--prefix=/usr \                                                        指向安装目录
--sbin-path=/usr/sbin/nginx \                                 指向(执行)程序文件(nginx)
--conf-path=/etc/nginx/nginx.conf \                      指向配置文件
--error-log-path=/var/log/nginx/error.log \              指向log
--http-log-path=/var/log/nginx/access.log \            指向http-log
--pid-path=/var/run/nginx/nginx.pid \                      指向pid
--lock-path=/var/lock/nginx.lock \                         (安装文件锁定,防止安装文件被别人利用,或自己误操作。)
--user=nginx \
--group=nginx \
--with-http_ssl_module \                      启用ngx_http_ssl_module支持(使支持https请求,需已安装openssl)
--with-http_flv_module \                       启用ngx_http_flv_module支持(提供寻求内存使用基于时间的偏移量文件)
--with-http_stub_status_module \     启用ngx_http_stub_status_module支持(获取nginx自上次启动以来的工作状态)
--with-http_gzip_static_module \   启用ngx_http_gzip_static_module支持(在线实时压缩输出数据流)
--http-client-body-temp-path=/var/tmp/nginx/client/ \ 设定http客户端请求临时文件路径
--http-proxy-temp-path=/var/tmp/nginx/proxy/ \ 设定http代理临时文件路径
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \ 设定http fastcgi临时文件路径
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \ 设定http uwsgi临时文件路径
--http-scgi-temp-path=/var/tmp/nginx/scgi \ 设定http scgi临时文件路径
--with-pcre 启用pcre库

4.启动与访问

注意:启动nginx之前,上边将临时文件目录指定为/var/temp/nginx/client, 需要在/var 下创建此目录

mkdir /var/temp/nginx/client -p

进入到Nginx目录下的sbin目录

cd /usr/local/ngiux/sbin

输入命令启动Nginx(默认端口80)
在这里插入图片描述
相关命令:

./nginx -s stop   杀进程,停止运行
./nginx -s quit 正常退出
./nginx -s reload  重新加载配置文件

可能遇到的问题:

问题:nginx启动报错 : [emerg] open() “/var/run/nginx/nginx.pid” failed (2: No such file or directory)

原因:每次虚拟机重启后,var/run/nginx,nginx这个文件夹都会被删除,搞得每一次都要去建立nginx这个文件夹

解决:
(1)进入 cd /usr/local/nginx/conf/ 目录,编辑配置文件nginx.conf
(2)在配置文件中有个注释的地方: #pid logs/nginx.pid
(3)将注释放开,并修改为:pid /usr/local/nginx/logs/nginx.pid
(4)在 /usr/local/nginx 目录下创建 logs 目录:mkdir /usr/local/nginx/logs
(5)启动nginx服务:./usr/local/nginx/sbin/nginx

二、配置文件

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
 }

大概就是三大块内容:

1.全局块

从配置文件开始到 events 块之间的内容,主要会设置一些影响nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)允许生成的 worker process 数进程 PID 存放路径日志存放路径和类型以 及配置文件的引入等。

 worker_processes  1;

这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是 会受到硬件、软件等设备的制约。

2.events块

events {
 worker_connections  1024;
}

events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行==序列化==,是否允许同时接收多个网络连接,选取哪种事件驱动模型来==处理连接请求==,每个 word process 可以同时支持的==最大连接数==等。

上述例子就表示每个 work process 支持的最大连接数为 1024.

这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置

3.http块(使用频繁)

==代理、缓存和日志定义==等绝大多数功能和第三方模块的配置都在这里。

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
    }
}
  • 每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。
  • 而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。

http全局块:

http全局块配置的指令包括文件引入MIME-TYPE 定义日志自定义连接超时时间单链接请求数上限等。

全局 server 块:

最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置。

location 块:

一个 server 块可以配置多个 location 块。
这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称 (也可以是IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。 地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

三、反向代理

在这里插入图片描述

1.使用 Nginx 反向代理,访问 www.123.com 直接跳转到 127.0.0.1:8080。

端口查看:

firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd –reload
查看已经开放的端口号 firewall-cmd --list-all

将本机的host文件添加域名和ip对应

ip   域名

修改nginx配置文件

server {
 listen       80;
 server_name  192.168.17.129;

 location / {
  root   html;
  index  index.html index.htm;
  proxy_pass  http://127.0.0.1:8080
 }
}

nginx 反向代理服务监听 192.168.17.129的80端口,如果有请求过来,则转到proxy_pass配置的对应服务器上

2.使用 Nginx 反向代理,根据访问的路径跳转到不同端口的服务中,Nginx 监听端口为 9001。

server {
 listen       9001;
 server_name  192.168.17.129;

 location ~ /edu/ {
  proxy_pass  http://127.0.0.1:8080
 }

 location ~ /vod/ {
  proxy_pass  http://127.0.0.1:8081
 }
}

四、负载均衡

    # 看这里
    upstream myserver {
        server 208.208.128.122:8081;
        server 208.208.128.122:8082;
    } 
    
    server {
        listen       80;
        server_name  208.208.128.122;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            proxy_pass   http://myserver;
            #proxy_pass   http://127.0.0.1:8081;
            index  index.html index.htm;
    }

分配服务器策略:

a. 轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。

b. weight

weight 代表权重, 默认为 1,权重越高被分配的客户端越多

    upstream myserver {
        server 208.208.128.122:8081 weight=10;   #  在这儿
        server 208.208.128.122:8082 weight=10;
    }
    server {
        listen       80;
        server_name  208.208.128.122;
        location / {
            root   html;
            proxy_pass   http://myserver;
            index  index.html index.htm;
    }

c. ip_hash

ip_hash 每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器

    upstream myserver {
        ip_hash;                            //  在这儿
        server 208.208.128.122:8081 ;   
        server 208.208.128.122:8082 ;
    }
    server {
        listen       80;
        server_name  208.208.128.122;
        location / {
            root   html;
            proxy_pass   http://myserver;
            index  index.html index.htm;
    }

d. fair(第三方)

fair(第三方),按后端服务器的响应时间来分配请求,响应时间短的优先分配。

    upstream myserver {                    
        server 208.208.128.122:8081 ;   
        server 208.208.128.122:8082 ;
        fair;                                                         #  在这儿
    }
    server {
        listen       80;
        server_name  208.208.128.122;
        location / {
            root   html;
            proxy_pass   http://myserver;
            index  index.html index.htm;
    }

五、动静分离

在这里插入图片描述
动静分离的实现有两种:

  1. 把静态文件独立成单独的域名,放在独立的服务器上(主流);
  2. 动态跟静态文件混合在一起发布,通过 nginx 来分开。

nginx中配置

server {
        listen       80;
        server_name  208.208.128.122;
        location / {
            root   html;
            proxy_pass   http://myserver;
            index  index.html index.htm;

        location /image/ {
            root  /data/;
            autoindex  on; # 列出当前目录的内容
        }
    }

六、高可用集群

相关文章
|
12天前
|
前端开发 JavaScript 应用服务中间件
终极 Nginx 配置指南
本文介绍了Nginx的基本配置及其优化方法。首先,通过删除注释简化了Nginx的默认配置文件,使其更易于理解。接着,文章将Nginx配置文件分为全局块、events块和http块三部分进行详细解释。此外,还提供了如何快速上线网站、解决前端history模式404问题、配置反向代理、开启gzip压缩、设置维护页面、在同一IP上部署多个网站以及实现动静分离的具体配置示例。最后,附上了Nginx的基础命令,包括安装、启动、重启和关闭等操作。
|
5月前
|
Web App开发 网络协议 应用服务中间件
老程序员分享:Nginx高级配置
老程序员分享:Nginx高级配置
44 0
|
5月前
|
应用服务中间件 程序员 Linux
老程序员分享:Nginx常用命令
老程序员分享:Nginx常用命令
31 0
|
12月前
|
域名解析 负载均衡 网络协议
Nginx系列教程(完) -终章总结
Nginx系列教程(完) -终章总结
67 0
|
6月前
|
负载均衡 Java 应用服务中间件
Nginx高性能服务器
Nginx高性能服务器
54 2
|
6月前
|
应用服务中间件 测试技术 Go
Nginx被它打败了?
Nginx被它打败了?
56 0
|
域名解析 开发框架 Ubuntu
Caddy VS Nginx,谁才是真正的王者
Caddy 2 is a powerful, enterprise-ready, open source web server with automatic HTTPS written in Go.
7047 1
Caddy VS Nginx,谁才是真正的王者
|
监控 应用服务中间件 调度
Nginx为什么能快到根本停不下来?
Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。本文从底层原理分析 Nginx 为什么这么快!
|
缓存 负载均衡 监控
Nginx: 挂了怎么办?热部署了解吗?什么是鲸群效应?Nginx你不知道的那些事一
Nginx: 挂了怎么办?热部署了解吗?什么是鲸群效应?Nginx你不知道的那些事一
|
数据采集 应用服务中间件 nginx
Nginx - 使用Nginx实现数据采集的构想
使用Nginx实现数据采集的构想
83 0
Nginx - 使用Nginx实现数据采集的构想