nginx
一、nignx相关概念
1、nginx是什么?
nginx是一个开源、支持高性能高并发的www服务和代理服务软件。
2、nginx主要应用
web服务软件
nginx是一个支持高性能,高并发的web服务软件,它具有很多优秀的特性,作为web服务器,与apache相比,nginx能够支持更多的并发连接访问,但是占用的资源确实更少,效率更高,在功能上也强大了很多,几乎不逊色于apache。
反向代理或负载均衡服务
在反向代理或负载均衡方面,nginx可以作为web服务、php等动态服务及memcached缓存的代理服务器。
前端业务数据缓存服务
在web缓存服务方面,nginx可通过自身的proxy_cache模块实现缓存软件的功能。
3、反向代理和正向代理的区别
https://www.cnblogs.com/taostaryu/p/10547132.html
4、如何正确选择web服务器
静态业务:如是高并发场景,尽量采用nginx;
动态业务:理论上采用nginx和apache均可,建议选择nginx。动态业务可以有nginx兼做前端代理,再根据页面元素的类型或者目录,转发到后端相应服务器进行处理;
既有静态业务又有动态业务:采用nginx
二、nginx安装
1、查看当前linux系统环境:cat /etc/redhat-release uname -m
2、安装nginx所需要的pcre库
安装pcre库是为了使nginx只是具备uri重写功能的rewrite模块。
yum install pcre pcre-devel -y
rpm -qa pcre-devel pcre
3、安装nghinx所需要的openssl库
nginx在使用https服务的时候要用到此模块
rpm -qa openssl openssl-devel
4、安装nginx
mkdir -p /home/zhaoyang/tools cd /home/zhaoyang/tools wget -q http://nginx.org/download/nginx-1.6.3.tar.gz ls -l nginx-1.6.3.tar.gz tar xf nginx-1.6.3.tar.gz useradd nginx -s /sbin/nologin -M cd nginx-1.6.3/ ./configure --user=nginx --group=nginx --prefix=/applicaiton/nginx/ --with-http_stub_status_module --with-http_ssl_module make make install /application/ nginx/sbin/nginx netstat -lnt|grep 80 curl 127.0.0.1
5、nginx的目录结构
6、nginx主配置文件nginx.conf
因为nginx配置文件数百行,我们先去掉所有的默认注释行:
egrep -v "#|^$" nginx.conf.default
整个nginx配置文件核心框架如下:
三、nginx虚拟主机配置
1、虚拟主机概念
所谓虚拟主机,在web服务里就是一个独立的网站站点。这个站点对应独立的域名,具有独立的程序以及资源,可以独立的对外提供服务共用户访问;
在nginx中使用一个server{}来表示一个虚拟主机,一个web服务里面可以有多个虚拟主机,就是可以支持多个虚拟主机站点;
2、虚拟主机类型
基于域名的虚拟主机
根据不同的域名来区分不同的虚拟主机,该方式是现在最为广泛使用的。(掌握)
基于端口的虚拟主机
根据不同的端口来区分不同的虚拟主机(了解)
基于ip的虚拟主机
根据不同的ip来区分不同的虚拟主机(了解)
3、基于域名的虚拟主机配置
使用grep过滤命令来生成基础的nginx主配置文件nginx.conf,然后根据生成的初始化配置进行修改。
diff nginx.conf nginx.conf.default
egrep -v "#|^$" nginx.conf.default >nginx.conf
创建域名对应的站点目录和文件
mkdir ../html/www -p
echo "http://www.etiantian.org" >../html/www/index.html
检查语法并重新加载nginx
../sbin/nginx -t
../sbin/nginx -s reload
配置本地hosts文件
echo "120.25.122.83 www.etiantian.org" >> /etc/hosts
验证配置站点是否成功
curl www.etiantian.org
4、配置多个基于域名的虚拟主机
其实就是将server复制一份,修改相应的域名和站点目录即可
创建域名对应的站点目录和文件
mkdir ../html/bbs -p
mkdir ../html/blog -p
echo "http://bbs.etiantian.org" >../html/bbs/index.html
echo "http://blog.etiantian.org" >../html/blog/index.html
配置本地hosts文件
echo "120.25.122.83 www.etiantian.org bbs.etiantian.org blog.etiantian.org" >> /etc/hosts
5、nginx配置虚拟主机的步骤
-
- 增加一个完整的server标签段大结尾处,注意要放在http的结束大括号前面,也就是将server标签放入http标签;
- 更改server_name以及对应网页的root根目录,如果需要其他参数可以增加或者修改;
- 创建server_name域名对应的网页根目录,并且建立测试文件,如果没有index首页,访问会出现403错误;
- 检查nginx配置文件语法,平滑重新nginx服务,快速检查启动结果;
- 在客户端对server_name初的配置的于ing做host解析或dns解析;
- 验证域名访问配置是否正确;
6、nginx常用功能配置
6.1、配置文件的优化
nginx的主配置文件为nginx.conf,主配置文件包含的所有虚拟主机的子配置文件会统一放到extra目录中,虚拟主机的配置文件按照网站的域名或功能取名,例如www.conf 、bbs.conf、blog.conf等。当然如果虚拟主机的数量不是很多,也可以把多个虚拟主机配置成一个单独的配置文件,仅仅和nginx的主配置文件分离开就行了;
6.2、虚拟主机别名
其实就是为虚拟主机设置一个出了主域名以外的一个或多个域名,这样就能实现用户访问多个域名对应同一个虚拟主机网站的功能了。
6.3、nginx状态信息功能
nginx status:nginx软件的功能模块中有一个ngx_http_stub_status_module模块,这个模块的主要功能是记录nginx的基本访问状态信息,让使用者了解nginx的工作状态。
通过如下方法检查编译安装ginx时是否设定了上述模块
../sbin/nginx -V
配置nginx status
增加一个状态配置文件status.conf
然后在主配置文件中增加了 include extra/status.conf;
配置本地hosts文件
../sbin/nginx -t
../sbin/nginx -s reload
nginx status 现实结果详解
active connections 表示nginx正在处理的活动连接数
server表示nginx启动到现在共处理了多少个连接
accepts 表示nginx启动到现在共成功创建了多少次握手
handled requests 表示总共处理的多少次请求
reading为nginx杜族客户端的header信息数
writing 为nginx返回客户端的header信息数
waiting 为nginx已经处理完正在等候下一次请求指令的驻留链接
6.4、nginx增加错误日志error_log
nginx软件会把自身运行的故障信息以及用户访问的日志信息记录到指定的日志文件里。
配置记录nginx的错误信息是调试nhinx服务的重要手段,该参数的名字为error_log,可以放在main区块中全局配置,也可以放在不同的虚拟机中单独记录;
error_log 语法格式以及参数说明
error_log file level;
关键字 日志文件 错误日志级别
关键字不能改变
日志文件可以指定任意存放日志的目录
错误级别常见的有debug、info、notice、warn、error、crit、alert、emerg,级别越高记录的信息越少,生产场景一般是warn、error、crit这三个其中之一,不能配置info等较低级别,会带来巨大的磁盘io消耗
默认格式
#default:error_log logs/error.log error;
可以放置的标签段
#context:main、http、server、location
nginx错误日志配置
6.5、nginx访问日志(access_log)
- nginx软件会把每个用户访问网站的日志信息记录到指定的日志文件里,以供网站的提供者分析用户的浏览行为;此功能由ngx_http_log_module模块负责;
- nginx默认的日志格式如下:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
默认放置在http标签内:
- nginx记录日志的默认参数配置如下:
access_log logs/access.log main;
可以放置在http、server、location等标签内
6.6、nginx的location
作用:
location指令的作用是根据用户请求的uri来执行不同的应用。其实就是根据用户请求的网站地址进行匹配,匹配成功就进行相关的操作;
语法:
location [ = | ~ | ~* | ^~ | @ ] uri { }
指令 匹配标示 匹配的网站网址 匹配uri后要执行的配置段
~和~*的区别在于前者匹配大小写,后者不区分大小写;
^~ 作用是在进行常规字符串匹配检查手,不做正则表达式的检查;
-
- 没有修饰符 表示:必须以指定模式开始,如:
server { server_name baidu.com; location /abc { …… } }
那么,如下是对的:
http://baidu.com/abc
http://baidu.com/abc?p1
http://baidu.com/abc/
http://baidu.com/abcde
-
- =表示:必须与指定的模式精确匹配
server { server_name sish location = /abc { …… } } 那么,如下是对的: http://baidu.com/abc http://baidu.com/abc?p1 如下是错的: http://baidu.com/abc/ http://baidu.com/abcde
-
- ~ 表示:指定的正则表达式要区分大小写
server { server_name baidu.com; location ~ ^/abc$ { …… } } 那么,如下是对的: http://baidu.com/abc http://baidu.com/abc?p1=11&p2=22 如下是错的: http://baidu.com/ABC http://baidu.com/abc/ http://baidu.com/abcde
-
- ~* 表示:指定的正则表达式不区分大小写
server { server_name baidu.com; location ~* ^/abc$ { …… } } 那么,如下是对的: http://baidu.com/abc http://baidu..com/ABC http://baidu..com/abc?p1=11&p2=22 如下是错的: http://baidu..com/abc/ http://baidu..com/abcde
-
- ^~ 类似于无修饰符的行为,也是以指定模式开始,不同的是,如果模式匹配,
那么就停止搜索其他模式了。
-
- @ :定义命名location区段,这些区段客户段不能访问,只可以由内部产生的请
求来访问,如try_files或error_page等
6.7、反向代理以及负载均衡