Nginx快速入门

[TOC]

Nginx基本概述

如果听说过或使用过Apache软件,那么很快就会熟悉Nginx软件,与Apache软件类似,Nginx(“engine x”)是一个开源的,支持高性能.高并发的www服务器和代理软件。它是由俄罗斯人lgor Sysoev开发的,最初被应用在俄罗斯的大型网站www.rambler.ru 上。后来作者将源代码以类BSD许可证的形式开源出来供全球使用

Nginx因具有高并发(特别是静态资源)占用系统资源少等特性,因为功能越来越多逐渐流行起来。

在功能方面,Nginx不但是一个优秀的Web服务软件,还具有反向代理,负载均衡和缓存服务功能在反向代理和负载均衡方面,类似于大名鼎鼎的LVS负载均衡及Haproxy等专业代理软件,但是Nginx部署起来更加简单且方便。 在缓存方面,又类似于Squid等专业软件,但是最常用的缓存软件是memcache 它的功能比Nginx的缓存更加强大

Nginx近两年也逐渐被越来越多的中小型网站所用。比较流行的Web架构是LNMP或LEMP LEMP取自(engine x) 目前LNMT架构更为强大

Nginx的官方介绍 http://nginx.org/en/

常见的 HTTP Web服务

Httpd 由Apache基金会
IIS 微软服务器版
GWS Google开发
Openrestry 基于nginx+lua
Tengline 淘宝基于Nginx开发

Nginx的重要特点

支持高并发:能支持几万并发连接 (特捏死静态小文件业务环境)

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

可以做HTTP反向代理及加速缓存 即负载均衡功能,内置·对RS节点服务器健康检查功能,这相当于专业的Haproxy软件或Lvs的功能

具备Squid等专业缓存软件的缓存功能

支持异步网络I/O事件模型 epoll(linux 2.6+)

为什么选择 Nginx

1.Nginx非常轻量

1.功能模块少(源代码仅保留http与核心模块代码,其余不够核心代码会作为插件来安装)
2.代码模块化(易读,便于二次开发,对于开发人员是非常友好)
2.互联网公司都选择Nginx

1.技术成熟, 大公司都选择Nginx
2.统一技术选型工具, 降低维护成本,减少故障几率。
3.Nginx涉足场景较多,技术更新成本低。
3.Nginx采用Epool网络模型, Apache采用Select模型。
Select: 当用户发起一次请求,select模型就会进行一次遍历扫描,从而导致性能低下。
Epoll: 当用户发起请求,epool模型会直接进行处理,效率高效,并无连接限制。

Nginx 应用场景

静态处理(mp4|html|png|jpg)  -> 服务端存放的是什么,客户端浏览器就展示什么
反向代理
负载均衡
代理缓存
访问限制 (tcp连接数、http请求数)
访问认证 (用户和密码、来源IP)
安全防护 (waf防火墙,使用lua实现的,花钱买服务,花钱买经验)

Nginx快速安装

1.epel仓库=>Nginx(1.版本低 2.配置文件不一样)
2.源码编译=>Nginx(1.复杂   2.企业不使用)
3.官方仓库=>Nginx)(√1.版本较新 2.安装简单 3.配置不复杂)

1.配置Nginx官方的仓库
    [root@web01 ~]# vim /etc/yum.repos.d/nginx.repo
    [nginx]
    name=nginx repo
    baseurl=http://nginx.org/packages/centos/7/$basearch/
    gpgcheck=0
    enabled=1

2.安装Nginx【一定确认是通过官方的仓库安装上】
    [root@web01 ~]# yum install nginx -y

3.检查版本【1.14.0】
    [root@web01 ~]# nginx -v
    nginx version: nginx/1.14.0
4.查看nginx编译的参数
    nginx -V

5.编译参数越多越好,还是越少越好?
源码编译好了,做成的rpm包

越少:功能少,后期可维护性差
越多:功能全,覆盖广,可维护性强

Nginx安装目录

为了让大家更清晰的了解Nginx软件的全貌,有必要介绍下Nginx安装后整体的目录结构及文件功能。

[root@Nginx ~]# rpm -ql nginx

如下表格对Nginx安装目录做详细概述

路径  类型  作用
/etc/nginx
/etc/nginx/nginx.conf
/etc/nginx/conf.d
/etc/nginx/conf.d/default.conf  配置文件  Nginx主配置文件
/etc/nginx/fastcgi_params
/etc/nginx/scgi_params
/etc/nginx/uwsgi_params         配置文件  Cgi、Fastcgi、Uwcgi配置文件
/etc/nginx/win-utf
/etc/nginx/koi-utf
/etc/nginx/koi-win              配置文件  Nginx编码转换映射文件
/etc/nginx/mime.types           配置文件  http协议的Content-Type与扩展名
/usr/lib/systemd/system/nginx.service   配置文件  配置系统守护进程管理器
/etc/logrotate.d/nginx          配置文件  Nginx日志轮询,日志切割
/usr/sbin/nginx
/usr/sbin/nginx-debug           命令  Nginx终端管理命令
/etc/nginx/modules
/usr/lib64/nginx
/usr/lib64/nginx/modules        目录  Nginx模块目录
/usr/share/nginx
/usr/share/nginx/html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/index.html    目录  Nginx默认站点目录
/usr/share/doc/nginx-1.12.2
/usr/share/man/man8/nginx.8.gz  目录  Nginx的帮助手册
/var/cache/nginx                目录  Nginx的缓存目录
/var/log/nginx                  目录  Nginx的日志目录

Nginx编译参数

查看Nginx编译参数

[root@Nginx ~]# nginx -V

下表展示了Nginx编译参数选项以及作用

编译选项                                                      作用

--prefix=/etc/nginx
--sbin-path=/usr/sbin/nginx
--modules-path=/usr/lib64/nginx/modules
--conf-path=/etc/nginx/nginx.conf
--error-log-path=/var/log/nginx/error.log
--http-log-path=/var/log/nginx/access.log
--pid-path=/var/run/nginx.pid

--lock-path=/var/run/nginx.lock                        程序安装目录和路径
--http-client-body-temp-path=/var/cache/nginx/client_tem
--http-proxy-temp-path=/var/cache/nginx/proxy_temp
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp
--http-scgi-temp-path=/var/cache/nginx/scgi_temp       临时缓存文件


--user=nginx
--group=nginx 设定Nginx进程启动用户和组(安全)
--with-cc-opt 设置额外的参数将被添加到CFLAGS变量
--with-ld-opt 设置附加的参数, 链接系统库

Nginx配置文件

Nginx主配置文件/etc/nginx/nginx.conf是一个纯文本类型的文件,整个配置文件是以区块的形式组织的。一般,每个区块以一对大括号{}来表示开始与结束。

1.CoreModule 核心模块
2.EventModule 事件驱动模块
3.HttpCoreModule http内核模块

需了解扩展项

CoreModule层下可以有Event、HTTP
HTTP模块层允许有多个Server层, Server主要用于配置多个网站
Server层又允许有多个Location, Location主要用于定义网站访问路径

CoreModule 核心模块

user www;                       #Nginx进程所使用的用户
worker_processes 1;             #运行的进程数量
error_log /log/nginx/error.log  #错误日志
pid /var/run/nginx.pid          #Nginx服务启动后产生的pid进程号

events事件模块

events {            
    worker_connections  //每个worker进程支持的最大连接
        use epool;      //事件使用的模型(默认epool)
}                       //事件模块结束

http内核模块

http {                                      # http开始
    include       /etc/nginx/mime.types;    # 包含
    default_type  application/octet-stream; #

# 定义日志的格式
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

# 访问日志存放的路径【main是日志的格式】
access_log  /var/log/nginx/access.log  main;
sendfile        on;
#tcp_nopush     on;
keepalive_timeout  65;                  # 长连接
#gzip  on;                              # 压缩
include /etc/nginx/conf.d/*.conf;       # 所有的conf结尾的文件都被包含起来

server {                                # 我要定义一个网站【博客】
listen       80;                        # 监听80端口
server_name  localhost;                 # 对应的域名

location / {                            # 用户请求域名时,默认匹配的规则
    root   /usr/share/nginx/html;       # 网站根目录
    index  index.html index.htm;        # 访问的默认页面
}

error_page   500 502 503 504  /50x.html; # 定义错误页面的
}

}

部署一个站点

1.对应的nginx配置文件

[root@web01 conf.d]# cat /etc/nginx/conf.d/oldboy_game.conf 
server {
    listen 80;
    server_name game.oldboy.com;

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

2.对应的源代码文件【手动-太low】 就是代码上线

[root@web01 conf.d]# mkdir /oldboy_code
[root@web01 conf.d]# cd /oldboy_code/
[root@web01 oldboy_code]# rz  html5.zip
[root@web01 oldboy_code]# unzip html5.zip
[root@web01 oldboy_code]# pwd
/oldboy_code
[root@web01 oldboy_code]# ls
ceshi  game  html5.zip  img  index.html  readme.txt

3.检查nginx的语法

[root@web01 oldboy_code]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

4.重载Nginx【reload|restart】

[root@web01 oldboy_code]# #nginx -s reload
[root@web01 oldboy_code]# systemctl reload nginx

5.如何访问:

    1.通过服务器的IP直接访问:10.0.0.7
    2.通过域名方式访问
        Windows:   C:\Windows\System32\drivers\etc\hosts 文件
        Mac:       sudo vim /etc/hosts
        10.0.0.7   game.oldboy.com
    3.使用ping命令测试域名解析是否正常