天天看点

Nginx

   Nginx

Nginx基本简述

Nginx软件介绍

Nginx是一个开源且高性能、可靠的HttpWeb服务、代理服务。

开源: 直接获取源代码

高性能: 支持海量并发

可靠: 服务稳定

如果你听说或使用过 Apache软件,那么很快就会熟悉 Nginx软件,与 Apache软件类似, Nginx ( “engme x")是一个开源的,支持高性能、高并发的 WWW服务器和代理服务软件。

它是由俄罗斯人 Igor Sysoev开发的,最初被应用在勘罗斯的大型网站 www.rambler.ru 上,后来作者将源代码以类BSD许可证的形式开源出来供全球使用。

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

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

Nginx 可以运行在 UNIX、Linux、BSD、Mac 0S X、Solaris,以及 Microsoft Windows 等操作系统中。随着Nginx在国内很多大型网站中的稳定高效运行,近两年它也逐渐被越来越多的中小型网站所使用。当前流行的Nginx Web组合被称为LNMP或LEMP(即Linux Nginx MySQL PHP),其中 LNMP 里的 N 取自Nginx ( "engine x" )

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

常见的 HTTP Web服务

Httpd 由Apache基金会

IIS 微软服务器版

GWS Google开发

Openrestry 基于nginx+lua

Tengline 淘宝基于Nginx开发

Nginx服务企业应用

常用来提供静态服务的软件

  Apache :这是中小型Web服务的主流,Web服务器中的老大哥,

  Nginx :大型网站Web服务的主流,曾经Web服务器中的初生牛犊,现已长大。

  Nginx 的分支 Tengine ( http://tengine.taobao.org/)目前也在飞速发展•

Lighttpd :这是一个不溫不火的优秀 Web软件,社区不活跃,静态解析效率很高.在 Nginx 流行前,它是大并发静态业务的首选,国内百度贴吧、豆瓣等众多网站都有Lighttpd奋斗的身彩"  

常用来提供动态服务的软件

* PHP ( FastCGI ):大中小型网站都会使用,动态网页语言PHP程序的解析容器。它可配合Apache解析动态程序,不过,这里的PHP不是FastCGI守护进程横式,而是mod_php5.so ( module)也可配合Nginx解析动态程序,此时的PHP常用FastCGI守护进程模式提供服务。

* Tomcat :中小企业动态Web服务主流,互联网Java容器主流(如jsp、do )

* Resin :大型动态Web服务主流,互联网Java容器主流(如jsp、do )

* IIS ( Internet information services ):微软 windows 下的 Web 服务软件(如 asp、aspx )

为什么选择 Nginx

1.Nginx非常轻量

1.功能模块少(源代码仅保留http与核心模块代码,其余不够核心代码会作为插件来安装)

2.代码模块化(易读,便于二次开发,对于开发人员是非常友好)

2.互联网公司都选择Nginx

1.技术成熟, 大公司都选择Nginx

2.统一技术选型工具, 降低维护成本,减少故障几率。

3.Nginx涉足场景较多,技术更新成本低。

3.Nginx采用Epoll网络模型, Apache采用Select模型。

Select: 当用户发起一次请求,select模型就会进行一次遍历扫描,从而导致性能低下。

Epoll: 当用户发起请求,epoll模型会直接进行处理,效率高效,并无连接限制。

Nginx 软件特性

HTTP服务器的特色及优点:

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

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

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

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

支持异步网络I/O事件横型epoll(Linux2.6+)

nginx功能特性

web网站服务

反向代理负载均衡(nginx /lvs /haproxy)

nginx缓存服务(memcache /redis /mongodb)

Nginx 应用场景

静态处理

反向代理

负载均衡

代理缓存

访问限制

访问认证

安全防护

Nginx安装与部署

Mainline version 开发版

Stable version 稳定版

Legacy version 历史版本

关于Nginx的安装方法

epel仓库=>Nginx(1.版本低 2.配置文件不一样)

源码编译=>Nginx(1.复杂   2.企业不使用)

官方仓库=>Nginx)(√1.版本较新 2.安装简单 3.配置不复杂)

关于编译安装

编译参数越多越好,还是越少越好?

源码编译好了,做成的rpm包

越少:功能少,后期可维护性差

越多:功能全,覆盖广,可维护性强

Nginx安装步骤

基础环境准备

#确认系统网络
[root@Nginx ~]# ping baidu.com
#关闭firewalld
[root@Nginx ~]# systemctl stop firewalld
[root@Nginx ~]# systemctl disable firewalld
#临时关闭selinux
[root@Nginx ~]# setenforce 0      

配置Nginx官方仓库

[root@web01 ~]# vim /etc/yum.repos.d/nginx.repo   
#路径不能变  必须以repo结尾 为了便于管理所以使用nginx.reop
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1      

安装nginx

nginx -V查看nginx编译的参数
nginx -v 检查版本信息
一定确认是通过官方的仓库安装上  不加-y  可以查看软件下载的地址
#安装Nginx
[root@Nginx ~]# yum install nginx 
#查看Nginx当前版本
[root@Nginx ~]# nginx -v
nginx version: nginx/1.14.0      

部署站点

对应的nginx配置文件

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

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

对应的源代码文件

部署对应的源代码文件【手动-太low】

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

检查nginx的语法

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

重载Nginx

reload或者restart
[root@web01 nfsnobody_code]# #nginx -s reload
[root@web01 nfsnobody_code]# systemctl reload nginx      

如何访问:

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

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是一个纯文本类型的文件,整个配置文件是以区块的形式组织的。一般,每个区块以一对大括号{}来表示开始与结束。

CoreModule 核心模块

EventModule 事件驱动模块

HttpCoreModule http内核模块

需了解扩展项

CoreModule层下可以有Event、HTTP

HTTP模块层允许有多个Server层, Server主要用于配置多个网站

Server层又允许有多个Location, Location主要用于定义网站访问路径

nginx.conf配置文件详解

[root@web01 ~]# cat /etc/nginx/nginx.conf 
user  nginx;                                # 运行nginx程序的用户
worker_processes  1;                        # 运行的进程数量
error_log  /var/log/nginx/error.log warn;   # 错误日志
pid        /var/run/nginx.pid;              # 存放nginx进程运行的pid

events {                                    # 事件模块开始
    worker_connections  1024;               # worker进程的最大连接数
    use epoll;                              # 事件使用的模型(默认epoll)
}                                           # 事件模块结束

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; # 定义错误页面的
    }
}      

CoreModule核心模块

user www;                       #Nginx进程所使用的用户
worker_processes 1;             #启动的work进程数(CPU数量一致或auto)
error_log /log/nginx/error.log  #错误日志
pid /var/run/nginx.pid          #Nginx服务启动后产生的pid进程号      

events事件模块

events {            
    worker_connections  //每个worker进程支持的最大连接数
    use                 //事件驱动模型, epoll默认
}      

http内核模块

//公共的配置定义在http{}
http {  //http层开始
...    
    //使用Server配置网站, 每个Server{}代表一个网站(简称虚拟主机)
    'server' {
        listen       80;        //监听端口, 默认80
        server_name  localhost; //提供服务的域名或主机名
        access_log host.access.log  //访问日志
        //控制网站访问路径
        'location' / {
            root   /usr/share/nginx/html;   //存放网站代码路径
            index  index.html index.htm;    //服务器返回的默认页面文件
        }
        //指定错误代码, 统一定义错误页面, 错误代码重定向到新的Locaiton
        error_page   500 502 503 504  /50x.html;
    }
    ...
    //第二个虚拟主机配置
    'server' {
    ...
    }  

    include /etc/nginx/conf.d/*.conf;  //包含/etc/nginx/conf.d/目录下所有以.conf结尾的文件

}   //http层结束      
上一篇: nginxnginx
下一篇: C++11 lambda

继续阅读