0
点赞
收藏
分享

微信扫一扫

Nginx系列(一)——快速上手Nginx

互联网码农 2022-04-27 阅读 91

引言

文章目录

一、Nginx基础扫盲

Nginx的发行版本

和Linux一样,Nginx有一些常用的发行版,我们来看一下,本文主要是对Nginx开源版本的学习

  • Nginx开源版

    简单的web服务器、反向代理、负载均衡

  • Nginx 商业版

    把Nginx和Lua脚本进行了一个整合,对微服务和云原生整合较好

  • openResty——免费开源

    OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关

  • Tengine——免费开源

    Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。

Nginx的功能和特性

  • 可以作为静态页面的 web 服务器
  • 反向代理
  • 负载均衡
  • 支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软件版本进行热更新
  • Nginx 以事件驱动的方式编写,有非常好的性能,
  • 处理静态文件,索引文件以及自动索引;打开文件描述符缓冲.
  • 无缓存的反向代理加速,简单的负载均衡和容错.
  • FastCGI,简单的负载均衡和容错

Nginx 的缺点

  • Nginx 仅能支持http、https和Email协议,这样就在适用范围上面小些

  • 对后端服务器的健康检查,只支持通过端口来检测,不支持通过 url来检测。不支持 Session 的直接保持,但能通过 ip_hash 来解决

二、Nginx安装与配置

一般使用解压包方式安装,也是我们主要使用的安装方式,另外可以通过yum命令安装(下文有提到)

step1.Linux环境检查

Loki以后都将在Linux环境下学习整理,因此你需要有一定的Linux基础,不用担心,Loki在写这篇文章时对Linux也是一知半解的状态

请自行准备好一个可以连通网络的虚拟机并且搭载CentOS7系统,你可以通过

  • VMWare虚拟机搭建CentOS7环境

  • 购买云服务器,装载CentOS7镜像

    推荐阅读搭建云服务器Linux学习环境

除此之外,我们需要安装XShellXftp这两款软件用于控制远端服务器

安装Nginx前,我们要先安装好它的依赖环境,就像Java程序需要运行在JVM上一样,nginx安装依赖以下环境,因此要检查是否安装,如果没有则需要安装这些环境

  1. gcc安装

    检查是否安装

    gcc --version
    

    已安装会显示版本号,未安装执行在线安装指令

    yum install gcc-c++
    
  2. PCRE 安装

    查看是否安装

    rpm -qa pcre
    

    已安装会显示版本号,未安装执行在线安装指令

    yum install -y pcre pcre-devel
    
  3. zlib 安装

    查看是否安装

    yum list installed | grep zlib*
    

    已安装会显示版本号,未安装执行在线安装指令

    yum install -y zlib zlib-devel
    

以上环境没有问题之后,我们来安装Nginx

step2.安装Nginx

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

image-20220426172024670

在本机下载以后通过xftp上传到Linux服务器,执行以下命令

命令功能
./configure --prefix=/usr/local/nginx配置Nginx环境
make编译
make install安装

安装完nginx后,会在路径 /usr/local 下生成 nginx 文件夹

进入这个目录

cd /usr/local/nginx

ls查看目录结构,建议自行去看看这些文件夹

  • sbin目录(里面有两个文件:nginx nginx.old)
  • conf目录,Nginx的配置文件目录,其中**nginx.conf**是主配置文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-soXIqspY-1651055574720)(D:\桌面\P_picture_cahe\image-20220426223005186.png)]

step3.启动Nginx服务

#进入nginx下的sbin目录
cd /usr/local/nginx/sbin
#启动Nginx服务,./表示是当前目录
./nginx 

如果访问你的Linux主机的ip地址能看到这个界面,说明Nginx服务启动成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6oysgvpm-1651055574721)(D:\桌面\P_picture_cahe\image-20220426223307823.png)]

三、安装的其他问题

防火墙问题导致无法访问Nginx

🚀 因为防火墙问题,在 windows 系统中访问 linux 中 nginx,默认不能访问的

因此需要开放入口规则,即开放80 端口,操作如下

查看开放的端口号

firewall-cmd --list-all 

设置开放的端口号

firewall-cmd --add-service=http –permanent 
firewall-cmd --add-port=80/tcp --permanent 

重启防火墙

firewall-cmd –reload 

image-20220426224718318

附:其他安装方式

  1. 下载windows版本

  2. 启动Nginx,直接双击nginx.exe即可

  3. 检查nginx是否启动成功

    直接在浏览器地址栏输入网址 http://localhost:80 回车,出现Nginx页面说明启动成功!

[root@centos-81 ~]# yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
[root@centos-81 ~]# useradd -u 8080 -M -s /sbin/nologin nginx
[root@centos-81 ~]# cd /usr/local/src/ ; wget https://nginx.org/download/nginx-1.14.2.tar.gz
[root@centos-81 src]# tar -xf nginx-1.14.2.tar.gz  
[root@centos-81 src]# cd nginx-1.14.2/
[root@centos-81 nginx-1.14.2]# ./configure --prefix=/opt/apps/nginx --user=nginx --group=nginx
[root@centos-81 nginx-1.14.2]# make -j 4 && make install

注册Nginx为开机自启动的系统服务

# 进入系统服务目录
cd /usr/lib/systemd/system
#创建nginx.service文件,并编辑
vim nginx.service

进入编辑模式,复制以下内容

[Unit]
Description=nginx service
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target

然后就是配置自启动了

#重启系统服务
systemctl daemon-reload

#查看当前Redis状态
ps -ef | gref nginx

#如果Redis处于启动状态,关闭该服务
cd /usr/local/nginx/sbin
./nginx -s stop

#根据系统服务启动 Nginx,不用到 nginx/sbin目录下启动了
systemctl start nginx
#查看进程状态,到这一步,如果Redis显示正在运行中,说明配置文件编写成功
systemctl status nginx

设置Nginx服务开机自启动

systemctl enable nginx.service

如果不想开机自启动了,可以使用下面的命令取消开机自启动

systemctl disable nginx

四、初识Nginx架构

Nginx.conf最小配置文件详解

#开头的表示注释内容,去掉所有注释内容,精简之后的内容Loki做了详细注释

#配置文件开始到 events 块之间的内容,主要设置一些影响nginx服务器整体运行的配置指令
#Nginx是多进程的(一个主进程和多个副进程),这个参数表明了开启一个副进程,worker_processes值越大,可支持的并发处理量也越多,主要受当前服务器物理CPU内核数制约
worker_processes  1;

#enents块:涉及的指令主要影响 Nginx 服务器与用户的网络连接
events {
	#表示每个 work process 支持的最大连接数为 1024,这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。
    worker_connections  1024;
}

#http块:包括 http全局部分、server 部分
http {
	#引入其他配置文件,便于后期维护管理与协同工作下死锁的问题
    include  mime.types; #服务器返回文件类型,否则客户端不知道返回的数据是什么类型
    #如果返回类型在mime.type中没有,则返回默认类型application/octet-stream
    default_type  application/octet-stream; 
    
    #简单理解免除了数据传输中拷贝的过程,在调优中详细解释
    sendfile    on;
    #先简单理解为保持连接超时时间,在反向代理中详解
    keepalive_timeout  65;
	
	#server 块:Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里
	#一个server代表一个虚拟主机 vhost,下文中有详解
    server {
    	#当前主机监听端口号
        listen   80;
        #填写主机名或者域名,涉及到域名解析,下文详解
        #可以理解为在浏览器请求localhost的80端口到达这个虚拟主机
        server_name  localhost; 
        
		#对域名(ip名)之外的字符串进行匹配URI
    	#例如对于localhost/userInfo,匹配的就是 /userInfo
        location / { #这个 / 代表Nginx主目录
            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 块。

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

五、虚拟主机和云服务器

辨析虚拟主机与云服务器

  • 虚拟主机是一种在单一服务器或服务器群上,完成多网域服务项目的方式,虚拟主机就是把一台物理服务器划分系统资源成为多个虚拟服务器

  • 云服务器ECS(Elastic Compute Service)是在群集服务器上虚似独立服务器,每一个ECS上都是一个独立的镜像系统,提高了服务器的安全性可靠性

  • 虚拟主机是很多网站共用IP,这样的话很容易受到彼此的影响。而云服务器是完全独立的IP,也就不用共享IP,能避免很多麻烦
  • 虚拟主机的资源也是大家一起用的,其实使用虚拟主机根本无法享受正常资源,如果遇到很多人抢占系统资源,那么你的网站就很容易出现不稳定、卡顿等状况,有时甚至影响到业务的开展。但云服务器是独享型,它与虚拟主机不一样,云服务器能够独享硬件服务器的独立线程,并且无CPU的限制,也没有争抢,就不会出现上述状况
  • 虚拟主机容易出现权限不足的情况

云服务器的一个简单使用场景

开发者可以租用虚拟主机或者云服务器,以供用户放置站点及应用组件,提供必要的数据存放和传输功能

🐇现在基本都是买阿里云腾讯云之类的云服务器了,按需购买,还有教育优惠多合适啊

用户在浏览器输入域名,被DNS服务器解析为IP地址,访问应用服务器上,基于http协议,服务器把数据报文返回,报文内容可能是网页、视频、图片等格式,被客户端解析

Nginx配置多站点——超详细

🐇Q: 举个栗子,Loki在腾讯云买了一台云服务器,它制定了一个公网ip地址,我们就可以通过这个公网ip来访问这台主机,一台主机绑定一个IP地址,这样子就有可能出现以下问题

🎯A:对于这个主机,很多时候我们开启了一个站点,没有那么多人同时来访问,那么这台主机上的资源是不是就浪费了,而且由于技术进步,主机性能愈发优秀,这种情况下,那我们再一台主机上只跑一个站点,那是非常非常浪费的

🐓我们来实现这样一个简单的业务场景,你可以跟着Loki一起尝试一下

具体实现如下:

  1. 新增一个站点的server块配置,这是完整的nginx.conf文件,相对于最小配置只增加了一个Server块

    worker_processes  1;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        #当然了,Server块可以在其他地方写,在这里引入,会方便管理,Loki选择偷懒直接在下面写了
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
    
        server {
            listen   80;
            # 站点域名,Loki的云服务器ip没有进行解析,所以就是本机localhost
            server_name  localhost;
            location / {
                root   html;
                index  index.html index.htm;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
        server {
            listen  88;            # 监听端口
            # 站点域名,Loki的云服务器ip没有进行解析,所以就是本机localhost
            server_name localhost;  
            location / {
                #页面的路径,这个是系统资源的绝对路径,需要你自己写
                root   /home/loki/blog; 
                index  index.html index.htm;
            }
            #错误页服务器错误重定向地址
            error_page   500 502 503 504  /50x.html; 
            location = /50x.html {
            	root   html;
            } 
        }
    }
    
  2. 在你server块中配置了资源路径/home/loki/www/blog,因此Loki新建了这个目录,存放了资源文件

    即:/home/loki/www/blog/index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Nginx88端口</title>
    </head>
    <body>
        <h1>88端口</h1>
        <h1>Nginx实现同一ip多站点配置</h1>
    </body>
    </html>
    
  3. 重启Nginx服务

  • nginx -s reload
  • 如果注册了系统服务,可以使用systemctl reload nginx重启,使用systemctl status nginx查看是否重启成功

访问默认端口出现Nginx页面

image-20220427181348760

访问88端口出现自定义页面

image-20220427181332519

六、Nginx基础命令

ps -ef|grep nginx
cd /usr/local/nginx/sbin #这个是你的Nginx安装目录
./nginx -s stop
cd /usr/local/nginx/sbin #这个是你的Nginx安装目录
./nginx -v
./nginx -s reload
举报

相关推荐

0 条评论