Nginx功能特性
1. 提供web服务
2. 作为反向代理服务器和负载均衡器
3. nginx缓存服务
Nginx作为web服务器的特点和优势
- 支持高并发:能支持上万并发连接(尤其是静态文件业务环境)
- 资源消耗少:与其他web服务如Apache等相比在同等量的并发连接下,nginx消耗的内存要小很多。(也就是轻量级)
- 支持异步网络I/O模型epoll
Nginx相对其他服务的优缺点
Nginx
- 基于异步网络I/O模 型
- 具备支持高性能,高并发的特性
- 不支持类似 Apache的DSO模式、扩展库必须编译进主程序(缺点)
- 进程占用系统资源比较低
Apache - 支持扩展库,可通过DSO、apxs方法编译安装额外的插件功能,不需要重新编译Apache
- 更稳定,更安全
- 基于传统的select模型,高并发能力有限(缺点)
- 高并发时消耗系统资源相对多一些。(缺点)
Nginx I/O多路复用
1.
传统的多进程并发模型 (每进来一个新的I/O流会分配一个新的进程管理。)
2.
第二种方法就是I/O多路复用 (单个线程,通过记录跟踪每个I/O流(sock)的状态,来同时管理多个I/O流 。) I/O multiplexing 这里面的 multiplexing 指的其实是在单个线程通过记录跟踪每一个Sock(I/O流)的状态来同时管理多个I/O流。发明它的原因,是尽量多的提高服务器的吞吐能力。
在同一个线程里面, 通过拨开关的方式,来同时传输多个I/O流。
Nginx使用epoll接收请求的过程
ngnix会有很多连接进来, epoll会把他们都监视起来,然后像拨开关一样,谁有数据就拨向谁,然后调用相
应的代码处理。
epoll
epoll 可以说是I/O 多路复用最新的一个实现,epoll 修复了select/poll绝大部分问题, 比如:
epoll 线程安全的。
epoll 告诉你具体哪个sock有数据,你不用自己去找了。
异步,非阻塞
每进来一个request,会有一个worker进程去处理。但不是全程的
处理,处理到什么程度呢?处理到可能发生阻塞的地方,比如向
后端服务器转发request,并等待请求返回。那么,这个处理的
worker不会这么一直等着,他会在发送完请求后,注册一个事
件:“如果upstream返回了,告诉我一声,我再接着干”。于是他
就休息去了。这就是异步。此时,如果再有request 进来,他就
可以很快再按这种方式处理。这就是非阻塞和IO多路复用。而一
旦上游服务器返回了,就会触发这个事件,worker才会来接手,
这个request才会接着往下走。这就是异步回调。
Nginx - yum 安装部署
首次安装可以按照以下步骤操作,非首次安装需要清理环境.
[root@wxm /]# cd /etc/yum.repos.d/ #配置yum源
[root@wxm yum.repos.d]# vim nginx.repo #vim创建并编辑这个nginx.repo文件
# 将下列配置复制粘贴到nginx.repo文件
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[root@wxm yum.repos.d]# yum -y install nginx #配置好yum源就可以用yum直接下载nginx了
启动nginx
[root@wxm yum.repos.d]# systemctl stop firewalld #关闭防火墙
[root@wxm yum.repos.d]# setenforce 0 # 关闭selinux防火墙
[root@wxm yum.repos.d]# nginx #启动nginx
---- nginx -v 查看nginx版本信息
---- nginx -V 查看nginx已编译模块
yum 安装还有一种简便的方法:
yum -y install epel-release #先下载epel源
# 注意:只有下载了epel源之后才能下载nginx,
# 因为epel源里有nginx的packages。
yum -y install nginx #下载完epel源后就可以直接下载nginx了
Nginx 源码安装部署
- 安装编译环境和一些必要的模块包
yum -y install gcc gcc-c++ #安装编译环境
yum install -y pcre pcre-devel #安装pcre软件包(使nginx支持http rewrite模块)
yum install -y openssl openssl-devel #安装openssl-devel(使nginx支持ssl)
yum install -y zlib zlib-devel #安装zlib
useradd nginx #为nginx创建一个用户,用于在nginx启动之后以此用户的身份运行,可在nginx的主配置文件中进行修改。
2.安装nginx
安装前需要去nginx官网下载合适的源码版本:www.nginx.org
这里以nginx-1.16.0版本为例
wget http://nginx.org/download/nginx-1.16.0.tar.gz #下载源码包,也可以下载到本地再上传到服务器
tar xzf nginx-1.16.0.tar.gz -C /usr/local/ #解压并指定解压到哪个目录
cd /usr/local/nginx-1.16.0/ #cd到解压后的目录
#编译 & 安装
./configure --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_temp --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 --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'
make && make install #如果是个平滑升级或者增加模块则不需要安装即不需要make install
nginx模块参数及其功能
文章链接 :点击跳转
nginx 配置文件详解
文章链接 :点击跳转
启动Nginx服务
- 首先为了方便可以先给/usr/local/ngin/sbin/ngin 做个软链接
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx
之后就可以直接用nginx命令进行操作
- nginx相关命令
nginx -c 配置文件路径 #指定该特定配置文件启动nginx
nginx -s stop #停止nginx服务
nginx -s reload #重新加载配置文件
nginx -t #检查配置文件是否正确
nginx -t -c 配置文件路径 #检查该特定的配置文件是否正确
systemctl start nginx #启动nginx并设置为开机自启
Nginx日志
nginx 日志文件分为 log_format 和 access_log 两部分
log_format 定义了日志文件显示的样式和具体显示哪些参数,在配置文件中的格式如下:
log_format main 'remote_addr - remote_user [time_local] "request" '
'status body_bytes_sent "$http_referer" '
'"http_user_agent" "http_x_forwarded_for"';
log_format 中参数变量及其说明如下:
变量 | 说明 |
---|---|
http_x_forwarded_for | 客户端的ip |
$remote_user | 客户端的名称 |
$time_local | 访问时的本地时间 |
$request | 请求的url和http协议 |
$status | 访问的状态码 |
$body_bytes_sent | 发送给客户端的主题内容大小 |
$http_referer | 记录客户端是从哪个页面链接访问过来的,如果没有则是‘-’ |
$http_user_agent | 记录客户端使用的浏览器的相关信息 |
Nginx的虚拟主机配置
nginx虚拟主机的含义:
虚拟主机是一种特殊的软硬件技术,它可以将网络上的每一台计
算机分成多个虚拟主机,每个虚拟主机可以独立对外提供www
服务,这样就可以实现一台主机对外提供多个web服务,每个虚
拟主机之间是独立的,互不影响。
nginx虚拟主机的配置(三种):
nginx可以实现虚拟主机的配置,nginx支持三种类型的虚拟主机配置。
- 基于域名的虚拟主机 (server_name来区分虚拟主机——应用:外部网站)
- 基于ip的虚拟主机, (一块主机绑定多个ip地址)
- 基于端口的虚拟主机(端口来区分虚拟主机——应用:公司内部网站,外部网站的管理后台)
注: 收集整理不易,转载请注明出处,欢迎批评指正。