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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

新零售进化论

新零售进化论

陈欢、陈澄波 / 中信出版社 / 2018-7 / 49.00

本书主要介绍了新零售的进化现象和规律,提出了新零售的第一性原理是物理数据二重性,即在新零售时代,所有的人、货、场既是物理的也是数据的。 通过这个原点,进一步衍生出了新零售的八大核心算法,并用大量的辅助观点和新零售案例来揭示新零售背后的算法逻辑。 综合一系列的理论推演和案例讲解,作者重点回答了以下3个问题: ● 我们是行业的强者,如果跟不上新零售的潮流,会不会被淘汰? ● 我......一起来看看 《新零售进化论》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

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

HEX CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具