内容简介:WEB服务器-Nginx之虚拟主机、日志、认证及优化
WEB服务器-Nginx之虚拟主机、日志、认证及优化
概述
Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 服务器 。 Nginx 是由 Igor Sysoev 为 俄罗斯 访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。其将 源代码 以类 BSD 许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而 闻名 。 2011 年 6 月 1 日, nginx 1.0.4 发布。
Nginx 是一款 轻量级 的 Web 服务器 / 反向代理 服务器及 电子邮件 ( IMAP/POP3 )代理服务器,并在一个 BSD-like 协议下发行。由俄罗斯的程序设计师 Igor Sysoev 所开发,供俄国大型的入口网站及搜索引擎 Rambler 使用。其特点是占有内存少, 并发 能力强,事实上 nginx 的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用 nginx 网站用户有:百度、 京东 、 新浪 、 网易 、 腾讯 、 淘宝 等
Nginx 的重要特性及应用场合
1 ) Nginx 重要特性
(1) 可针对静态资源告诉高并发访问及缓存
(2) 可使用反向代理加速,并且可进行数据缓存
(3) 具有简单的负载均衡,节点讲课检查和容错功能
(4) 支持原创 fastcgi 服务的缓存加速
(5) 支持基于域名、端口和 IP 的多虚拟主机站点等
2 ) Nginx 主要企业功能应用
( 1 )作为 web 服务软件
Nginx 是个支持高性能、高并发的 web 软件,作为 web 服务器, Nginx 能够支持更多的并发连接访问,并且占用的资源很少,效率更高。
(2) 作为反向代理或者负载均衡器
在反向代理或负载均衡服务方面, Nginx 可以作为 web 服务, php 、 java 的办法动态服务及 memcache 缓存的代理服务。
( 3 )前端业务数据缓存服务
Nginx 可以通过自身的 proxy_cache 模块实现类似 squid 等专业缓存软件功能
Nginx 的 WEB 服务
1 ) Nginx 作为 web 服务器的主要应用场景包括:
(1) 使用 N 信息运行 HTML 、 JS 、 CSS 等静态数据
(2) Nginx 结合 fastcgi 运行 PHP 等动态程序(使用 fastcgi_pass 方式)
(3) Nginx 结合 Tomcat 、 Resin 等支持 java 动态程序(使用 proxy_pass 方式)
2 ) Nginx 总体性能比 Apache 强
Nginx 使用最新的 epoll 和 kqueue 异步网络 IO 模型,而 Apache 使用的是传统的 select 模型。而目前 Linux 下能够承受的高并发访问 squid 、 memcache 软件采用都是 epoll 模型。戴亮连接读写时, Apache 采用的 select 网络 IO 模型比较低。
3 ) Apache select 和 Nginx epoll 的技术对比
指标 |
select |
epoll |
性能 |
随着连接数的增加心梗几句下滑 |
随着连接数的增加,性能基本上没有改变 |
连接数 |
连接数有限制,处理的最大连接数不超过 1024 |
连接数无限制 |
内在处理机制 |
线性轮询 |
回调 callback |
开发复杂性 |
低 |
高 |
Nginx 技术的深入剖析
Nginx 软件之所以强大,是因为他具有众多的通能模块。
1 、 Nginx 模块主要有 4 种角色:
(1) core( 核心模块 ) :构建 nginx 基础服务、管理其他模块。
(2) handlers( 处理模块 ) : 用于处理 HTTP 请求,然后产生输出。
(3) filters (过滤模块): 过滤 handler 产生的输出。
(4) load-balancers (负载均衡模块):当有多于一台的后端备选服务器时,选择一台转发 HTTP 请求。
当 Nginx 发送文件或者转发请求到其他服务器,由 handlers( 处理模块 ) 或 load-balancers( 负载均衡模块 ) 提供服务;
当需要 Nginx 把输出压缩或者在服务端加一些东西,由 fi lters( 过滤模块 ) 提供服务。
2 、 Nginx 的几个常用模块
1 ) Nginx 的核心功能模块 Nginx core module
Nginx 可信功能模块负载全局应用,主要对饮主配置文件的 main 区块和 events 区块区域,这里有很多 Nginx 必须的全局参数配置。
2 )标准的 http 功能模块集合
这些标准的 http 功能模块,虽然不是 Nginx 软件所必须的,但是都是很常用的,因此绝大部分默认都会安装到 Nginx 软件中
在生产环节中,配置,调优及优化 Nginx 软件,主要就是根据这些模块的功能修改相应的参数来实现的。
Nginx http 功能模块 |
模块说明 |
ngx_http_core_moudle |
包括一些核心的 http 参数配置,对应的 nginx 的配置为 http 区块 |
ngx_http_access_moudle |
访问控制模块,用来控制网站用户对 Nginx 的访问 |
ngx_http_gzip_moudle |
压缩模块,对 Nginx 返回的数据压缩,属于心梗优化模块 |
ngx_http_fastcgi_moudle |
FastCGI 模块,和动态相关的模块,如 PHP/JAVA |
ngx_http_proxy_moudle |
Proxy 代理模块 |
ngx_http_upstream_moudle |
负载均衡模块,可以实现网站的负载均衡功能,和节点的健康检查 |
ngx_http_rewrite_moudle |
URL 地址重写模块 |
ngx_http_limit_conn_moudle |
限制用户并发连接数及请求书模块 |
ngx_http_limit_req_moudle |
根据定义的 key 限制 Nginx 请求过程速率 |
ngx_http_log_moudle |
访问日志模块,以指定格式记录 Nginx 客户访问日志等信息 |
ngx_http_auth_basic_moudle |
Web 认证模块,设置 web 用户通过账户,密码访问 Nginx |
ngx_http_ssl_moudle |
Ssk 模块,用于加密的 httpd 连接,如 https |
ngx_http_stub_status_moudle |
记录 Nginx 基本访问状态信息等模块 |
一、 实验目标
1 、实战: Nginx 基于域名、端口和 IP 的多个虚拟主机
2 、实战: Nginx 虚拟主机的别名功能
3 、实战: Nginx 基于多个虚拟地址和端口的优化
4 、实战: Nginx 的状态信息功能实战
5 、实战: Nginx 的访问认证
6 、实战: Nginx 访问日志及轮询切割
二、 实验环境
系统环境 |
主机名 |
IP 地址 |
软件 |
Rhel6.5 |
yu63 |
192.168.1.63 |
Nginx |
三、 实验步骤
1 、安装 nginx
[root@yu63~]#service httpd stop
[root@yu63~]#service iptables stop
[root@yu63~]#yum install pcre pcre-devel openssl openssl-devel
[root@yu63~]#mkdir /opt/yu && cd /opt/yu/
[root@yu63 yu]#wget -q http://nginx.org/download/nginx-1.13.0.tar.gz
[root@yu63 yu]#tar -zxvf nginx-1.13.0.tar.gz
[root@yu63 yu]#cd nginx-1.13.0
[root@yu63 nginx-1.13.0]#useradd nginx -s /sbin/nologin
[root@yu63 nginx-1.13.0]#./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
[root@yu63nginx-1.13.0]#make -j 4
[root@yu63nginx-1.13.0]#make install
[root@yu63 nginx-1.13.0]# cd /usr/local/nginx/
[root@yu63 nginx]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
[root@yu63 nginx]#/usr/local/nginx/sbin/nginx -t
[root@yu63 nginx]#/usr/local/nginx/sbin/nginx
Nginx 虚拟主机配置实战
虚拟主机的概念
所谓的虚拟主机,在 web 服务里就是独立的网站站点,这个站点对应 duld 域名、 IP 、端口。具有独立的程序及资源目录,可以独立的对外提供给服务供用户访问。
对于 Apache 来说,虚拟主机的标签通常被包含在 <VirtualHost>~~~</VirtualHost> 中,而 Nginx 软件则是使用 server{} 标签来表示一个虚拟主机,一个 web 服务里可以有多个虚拟主机标签,即可以同时支持多个虚拟主机站点。
虚拟主机的类型
1 )基于域名的虚拟主机
2 )基于端口的虚拟主机
3 )基于 IP 地址的虚拟主机
实战 1 :基于域名和端口的多个虚拟主机
[root@yu63 nginx]# cd conf/
[root@yu63 conf]#egrep -v '#|^$' nginx.conf.default > nginx.conf
[root@yu63nginx]# rm -rf html/index.html
[root@yu63nginx]# mkdir -p html/mobanche
[root@yu63nginx]# mkdir -p html/mobanche1
[root@yu63nginx]# mkdir -p html/mobanche2
[root@yu63nginx]#echo 'mobanche'> html/index.html
[root@yu63nginx]# echo 'mobanche----1' > html/mobanche1/index.html
[root@yu63nginx]# echo 'mobanche----2' > html/mobanche2/index.html
[root@yu63nginx]#vim conf/nginx.conf
[root@yu63nginx]# cat conf/nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name www.mobanche.com;
location / {
root html/mobanche;
index index.html index.htm;
}
}
server {
listen 81;
server_name bbs.mobanche1.com;
location / {
root html/mobanche1;
index index.html index.htm;
}
}
server {
listen 82;
server_name blog.mobanche2.com;
location / {
root html/mobanche2;
index index.html index.htm;
}
}
}
[root@yu63nginx]# /usr/local/nginx/sbin/nginx -t
[root@yu63nginx]#/usr/local/nginx/sbin/nginx -s reload
[root@yu63nginx]# cat /etc/hosts
192.168.1.63 www.mobanche.com bbs.mobanche1.com blog.mobanche2.com
Windos 下面的 hosts 文件
实战 2 : Nginx 虚拟主机的别名功能
[root@yu63nginx]# vim conf/nginx.conf
[root@yu63nginx]# cat conf/nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name www.mobanche.com mobanche.com;
location / {
root html/mobanche;
index index.html index.htm;
}
}
server {
listen 81;
server_name bbs.mobanche1.com mobanche1.com;
location / {
root html/mobanche1;
index index.html index.htm;
}
}
server {
listen 82;
server_name blog.mobanche2.com mobanche2.com;
location / {
root html/mobanche2;
index index.html index.htm;
}
}
}
实战 3 : Nginx 基于多个域名、 ip 和端口的优化
[root@yu63 conf]#mkdir extra
173 sed -n ' 11,18p ' nginx.conf > extra/mobanche.conf
176 sed -n ' 19,26p ' nginx.conf > extra/mobanche1.conf
177 sed -n ' 27,34p ' nginx.conf > extra/mobanche2.conf
[root@yu63nginx]#vim nginx.conf # 删除 11-34 行
sed -i '10 i include extra/mobanche.conf;\ninclude extra/mobanche1.conf;\ninclude extra/mobanche2.conf;' nginx.conf
[root@yu63 nginx]# cat conf/extra/mobanche.conf
server {
listen 80;
server_name www.mobanche.com;
location / {
root html/mobanche;
index index.html index.htm;
}
}
[root@yu63nginx]#/usr/local/nginx/sbin/nginx -t
[root@yu63nginx]#/usr/local/nginx/sbin/nginx
实战 4 : Nginx 的状态信息功能实战
Nginx 软件功能模块中有一个 ngx_http_stub_status_moudle 模块,这个模块的主要功能就是记录 Nginx 的节本访问状态信息,让使用者了解 Nginx 的工作状态,例如连接数等信息。
[root@yu63 nginx]#cd extra
[root@yu63 extra]#
cat >> status.conf << EOFEOF
>># status
>>server {
>> listen 80;
>> server_name status.mobanche.com;
>> location / {
>> stub_status on;
>> access_log off;
>> }
>> }
[root@yu63 extra]#sed -i ' 13 i include extra/status.conf; ' ../nginx.conf
[root@yu63 extra]# ../../sbin/nginx -t
[root@yu63 extra]#. ../../sbin/nginx -s reload
实战 5 : Nginx 的访问认证
[root@ yu63 extra]# pwd
/usr/local/nginx/conf/extra
[root@ yu63 extra]#vim mobanche.conf
server {
listen 80;
server_name www.mobanche.com mobanche.com;
location / {
root html/mobanche;
index index.html index.htm;
auth_basic "welcome please enter user and passwd";
auth_basic_user_file /usr/local/nginx/conf/htpasswd;
}
}
[root@ yu63 conf]# htpasswd -bc /usr/local/nginx/conf/htpasswd yu 123456
Adding password for user yu
[root@ yu63 conf]# chmod 400 htpasswd
[root@ yu63 conf]# chown nginx htpasswd
[root@ yu63 conf]# cat htpasswd
yu:c5XqWgCfsgKoo
[root@ yu63 extra]# ../../sbin/nginx -t
[root@ yu63 extra]# ../../sbin/nginx -s reload
实战 6 :访问日志及轮询切割
Nginx 软件会把每个用户的访问网站的日志信息记录到指定的入职文件中,供网站提供者分析用户的浏览行为。
1 、控制日志的参数
参数 |
说明 |
log_format |
用来定义记录日志的格式(可以定义多种日志格式) |
access_log |
用来指定日志文件的路径及使用何种日志格式记录日志 |
2 、 Nginx 的访问日志主要默认参数
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
3 、日志变量说明
日志变量 |
说明 |
$remote_addr |
用以记录客户端的 ip 地址 |
$remote_user |
用来记录客户端用户名称 |
$time_local |
用来记录访问时间与时区 |
$request |
用来记录请求的 url 与 http 协议 |
$status |
用来记录请求状态;成功是 200 |
$body_bytes_sent |
服务器发送给客户端响应的 body 字节数 |
$http_referer |
用来记录从那个页面链接访问过来的 |
$http_user_agent |
记录客户端浏览器的相关信息 |
$http_x_forwarded_fo r |
当前端有代理服务器时没设置 web 节点记录客户端地址的配置,此参数生效的前提是代理服务器上也进行了 x_forwarded_fo r 设置 |
[root@yu63nginx]# cat conf/nginx.conf
[root@ yu63 nginx]# cat conf/nginx.conf
worker_processes 1;
error_log logs/error.log;
events {
worker_connections 1024;
}
http {
include 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"';
sendfile on;
keepalive_timeout 65;
include extra/mobanche.conf;
include extra/mobanche1.conf;
include extra/mobanche2.conf;
}
[root@ yu63 nginx]# cat conf/extra/mobanche.conf
server {
listen 80;
server_name www.mobanche.com;
location / {
root html/mobanche;
index index.html index.htm;
}
access_log logs/access_mobanche.log main;
}
[root@ yu63 nginx]# cat conf/extra/mobanche1.conf
server {
listen 81;
server_name www.mobanche1.com;
location / {
root html/mobanche;
index index.html index.htm;
}
access_log logs/access_mobanche1.log main;
}
[root@ yu63 nginx]# cat conf/extra/mobanche2.conf
server {
listen 82;
server_name www.mobanche2.com;
location / {
root html/mobanche;
index index.html index.htm;
}
access_log logs/access_mobanche2.log main;
}
[root@yu63 nginx]# tail -1 logs/access_mobanche.log
192.168.1.63 - - [15/May/2017:22:25:42 +0800] "GET / HTTP/1.1" 200 9 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.3.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "-"
[root@ yu63 extra]# ../../sbin/nginx -t
[root@ yu63 extra]# ../../sbin/nginx -s reload
[root@yu63 nginx]# tail -3 logs/access_mobanche.log
192.168.1.105 - - [15/May/2017:22:26:51 +0800] "GET /favicon.ico HTTP/1.1" 404 571 "http://www.mobanche.com/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.2669.400 QQBrowser/9.6.10990.400" "-"
192.168.1.105 - - [15/May/2017:22:26:51 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.2669.400 QQBrowser/9.6.10990.400" "-"
192.168.1.105 - - [15/May/2017:22:26:51 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.2669.400 QQBrowser/9.6.10990.400" "-"
注释:在没有开启访问实战时,查看日志中的内容,只是本机的 IP 地址,而配置之后,就可以看到客户端的主机 IP 。
3 、 Nginx 访问日志轮询切割脚本
[root@yu63 extra]# cat cut_nginx_log.sh
#!/bin/sh
Dateformat=`date +%Y%m%d`
Basedir="/usr/local/nginx"
Nginxlogdir="$Basedir/logs"
Logname="access_www"
[ -d $Nginxlogdir ] && cd $Nginxlogdir||exit 1
[ -f ${Logname}.log ]||exit 1
/bin/mv ${Logname}.log ${Dateformat}_${Logname}.log
/bin/mv access_mobanche1.log ${Dateformat}_access_mobanche1.log
/bin/mv access_mobanche2.log ${Dateformat}_access_mobanche2.log
$Basedir/sbin/nginx -s reload
[root@yu63 extra]# crontab -l # crontab -e 编写
45 22 * * * /bin/bash /usr/local/nginx/sbin/cut_nginx_log.sh
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。