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层结束