WEB服务器-Nginx之虚拟主机、日志、认证及优化

栏目: 服务器 · Nginx · 发布时间: 6年前

内容简介: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 文件

WEB服务器-Nginx之虚拟主机、日志、认证及优化

WEB服务器-Nginx之虚拟主机、日志、认证及优化

WEB服务器-Nginx之虚拟主机、日志、认证及优化

WEB服务器-Nginx之虚拟主机、日志、认证及优化

实战 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;

}

}

}

WEB服务器-Nginx之虚拟主机、日志、认证及优化

WEB服务器-Nginx之虚拟主机、日志、认证及优化

WEB服务器-Nginx之虚拟主机、日志、认证及优化

实战 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

WEB服务器-Nginx之虚拟主机、日志、认证及优化  

实战 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

WEB服务器-Nginx之虚拟主机、日志、认证及优化  

实战 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

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》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具