内容简介: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
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Think Python
Allen B. Downey / O'Reilly Media / 2012-8-23 / GBP 29.99
Think Python is an introduction to Python programming for students with no programming experience. It starts with the most basic concepts of programming, and is carefully designed to define all terms ......一起来看看 《Think Python》 这本书的介绍吧!