您的位置:首页 > 运维架构 > 反向代理

Nginx Web服务器及反向代理

2018-02-08 21:19 281 查看
1、目前常见的Web服务器:
Apache(http://httpd.apache.otg):仍是世界上用的最多的web服务器,市场占有率60%左右,模块非常丰富,系统非常稳点,可移植性好,但比较消耗内存。并发能力比较差。最多支持到3千到5千。
Lighttpd(http://www.lighttpd.net):是德国人写的一个开源软件,目前是提供一个高性能的网站,具有内存消耗低,CPU占用率低,效能好以及模块丰富,Nginx的重要竞争对手之一。
Tomcat服务器(http://tomcat.apache.org):Tomcat是一个开源,运行servlet和JSP Web应用软件的基于Java的Web应用软件,但是Tomcat对静态文件、高并发的的处理能力弱。在制造行业用的比较多,在互联网企业用的相对较少。
IBM WebSphere服务器:是一种功能完善、开放的web应用服务器,是IBM电子商务计划的核心部分,它是基于Java的应用环境,范围从简单至高级直至企业级,相对其他WEB服务器来说,应用数量较少。
Microsoft IIS:Microsoft的web服务器产品为Internet Information Server(IIS),IIS提供了一个图形界面管理工具,IIS是一种Web服务组件,其中包括Web服务器,FTP服务器、NNTP服务器(新闻服务)、SMTP服务器。
2、nginx服务器增长十分强劲,市场份额上升至21.4%,在web计算机中运行nginx服务器的多了52,000(+3.84%)台。目前,nginx是web计算机中的第三大服务器供应商,距离第二位的微软也只相差122,000台计算机。



3、nginx[engine x] is an HTTP and reverse proxy server,as well as mail proxy server。 nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。其特点是占用内存少,并发能力强。
如果使用nginx作为web服务器,那么nginx收到请求后将请求内容响应到客户端。如果使用nginx作为代理服务器,那么nginx收到请求后将请求转发到应用服务器(如tomcat),应用服务器处理完请求后将请求发送给nginx,然后nginx再将响应内容发送给客户端。
nginx是多进程架构,有一个主进程和若干个工作进程。主进程主要用来读取并检测配置文件,管理工作进程。工作进程用来处理客户端请求。nginx采用基于事件的模型和独立于操作系统的机制来高效地将请求分发到工作进程。官方网站:www.nginx.org
4、安装Nginx:
解压完之后,进入解压目录:cd nginx-1.12.2 中,输入:./configure --prefix=/usr/local/nginx
如果提示缺少PCRE:安装yum install pcre和yum install pcre -devel
make && make install
cd /usr/local/nginx

./sbin/nginx
5、信号控制与进程管理。



6、检查配置文件是否有错:Nginx -t进行测试。返回success则说明没问题。
7、配置文件:
worker-processes 1:表示只有一个子进程,可以修改,但是意义不大,一般设置为CPU数*核数。
Event{ worker_connections 1024;//指一个子进程最大允许连1024个子进程}:一般配置work的链接特性。
虚拟主机配置:
http{//主要 配置http服务器
Server1{//虚拟主机端
Listen   80;//监听的端口
server_name 192.168.1.2;//域名

Location / {//定位,把特殊的路径或文件再次定位}
root   文件夹//根目录
index  页面//如果没有访问指定目录,则访问此页面。
}

Server2{}

}

Nginx允许对不同的server做不同的log。解析配置文件中: #access_log  logs/host.access.log  main;说明该server访问的是日志文件时:logs/host.access.log,使用的格式是main格式。除了main格式,我们还可以定义其它格式。
main格式是什么?
log_format main '$remote_addr - $remote_user [$time_local]"$request" '

'$status $body_bytes_sent"$http_referer" '

'"$http_user_agent""$http_x_forwarded_for"';远程IP- 远程用户/用户时间 请求方法(如GET/POST) 请求体body长度 referer来源信息,http-user-agent用户代理/蜘蛛 ,被转发的请求的原始IP。
http_x_forwarded_for:在经过代理时,代理把你的本来IP加在此头信息中,传输你的原始IP。
main格式是我们定义好一种日志的格式,并起个名字,便于引用。
声明一个独特的log_format并命名:   log_format mylog '$remote_addr- "$request" '

'$status$body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';       
在下面的server/location,我们就可以引用 mylog
access_log logs/access_8080.log mylog;  ------->声明log  log位置  log格式;    


         实际应用: shell+定时任务+nginx信号管理,完成日志按日期存储
         分析思路:凌晨00:00:01,把昨天的日志重命名,放在相应的目录下,再USR1信息号控制nginx重新生成新的日志文件#!/bin/bash
base_path='/usr/local/nginx/logs'
log_path=$(date -d yesterday +"%Y%m")
day=$(date -d yesterday +"%d")
mkdir -p $base_path/$log_path
mv $base_path/access.log $base_path/$log_path/access_$day.log
#echo $base_path/$log_path/access_$day.log
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
8、crontab -e 里面内容:分 时 日 月 周 命令。---------------->用于定时。
9、location语法:location有定位的意思,根据Uri来进行不同的定位。在虚拟主机的配置中是必不可少的,location可以把网站的不同部分,定位到不同的处理方式上,比如:遇到PHP,如何调用PHP解释器--这时就需要location的语法。
location语法:location [=|~|~*|^~]patt{}。中括号中可以不写任何参数,此时成为一般匹配,也可以写参数,如下:
location = patt{}[精准匹配]
location  patt{}[一般匹配]
location ~ patt{}[正则匹配]
如何发挥作用:首先看有木有精准匹配,如果有就停止匹配过程。一般匹配patt,先理解成“字符串”,再理解成“正则表达式”尽量的多匹配URL,如果有多个一般匹配,谁匹配的长度大,以谁为准。location ~ image {
root /var/www/; //找/var/www/目录底下的image请求
index index.html;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Nginx