目录
1.4nginx配置简洁, apache较复杂1.5Nginx和Apache最核心的区别
一、Nginx简介
1.1概述
Nginx:
Nginx是一个高性能的HTTP和反向代理服务器。
是一款轻量级的高性能的web服务器/反向代理服务器/电子邮件(IMAP/POP3)代理服务器
单台物理服务器可支持30 000~50 000个并发请求。
Apache:
Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,不太适用于多处理器环境,因此,在一个apache Web站点扩容时,通常是增加服务器或扩充群集节点而不是增加处理器。
1.2 Nginx和Apache的优缺点比较
(1)nginx相对于apache的优点∶
轻量级,同样起web服务,比apache占用更少的内存及资源
抗并发,nginx处理请求是异步非阻塞的,而apache是阻塞型的在高并发下,nginx能保持低资源低消耗高性能
高度模块化的设计,编写模块相对简
(2)apache相对于nginx的优点∶
Rewrite比nginx的rewrite强大 (rewrite的主要功能就是实现统一资源定位符URL的跳转)
模块多,基本想到的都可以找到
少bug, nginx的bug相对较多
超稳定
存在的理由:一般来说,需要性能的web服务,用nginx。若不需要性能只求稳定,就选用apache。
1.3Nginx作为web服务器与Apache比较
相比apache,nginx使用更少的资源,支持更多的并发连接,体现更高的效率。
Nginx作为负载均衡服务器:nginx既可以在内部直接支持rails和php程序对外进行服务,也可以支持http代理服务器对外进行服务。
Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比较好。
作为邮件代理服务器:最早开发这个产品的目的之一也是作为邮件代理服务器。
1.4nginx配置简洁, apache较复杂
1.5Nginx和Apache最核心的区别
apache是同步多进程模型,一个连接对应一个进程,nginx是异步的,多个连接可以对应一个进程。
Nginx处理静态文件好,耗费内存少,只适合静态和反向。
Apache在处理动态有优势,
nginx并发性比较好,CPU占用内存低,如果rewrite频繁,选用apache最佳。
总的来说,apache依然是大部分公司的首选。
二.Linux中的I/O
I/O在计算机中指Input/Output,lOPS (Input/Output Per Second)即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一。IOPS是指单位时间内系统能处理的I/O请求数量,一般以每秒处理的IO请求数量为单位,I/O请求通常为读或写数据操作请求。
一次完整的I/O是用户空间的进程数据与内核空间的内核数据的报文的完整交换,但是由于内核空间与用户空间是严格隔离的,所以其数据交换过程中不能由用户空间的进程直接调用内核空间的内存数据,而是需要经历一次从内核空间中的内存数据copy到用户空间的进程内存当中,所以简单说I/O就是把数据从内核空间中的内存数据复制到用户空间中进程的内存当中。
磁盘I/O:buff/cache 的区别
网络I/O:一切皆文件,本质为对socket文件的读写
获取请求数据,客户端与服务器建立连接发出请求,服务器接受请求(1-3)
构建响应,当服务器接收完请求,并在用户空间处理客户端的请求,直到构建响应完成(4)
返回数据,服务器将已构建好的响应再通过内核空间的网络I/0发还给客户端(5-7)
三、Niginx的优化
一、隐藏nginx版本号
1.1查看版本号
方法一:curl命令
-
可以在 CentOS 中使用命令
curl -I http://192.168.59.118
显示响应报文首部信息。
curl -I http://192.168.59.118
方法二:在网页中查看
1. #切换至html目录,拖一个图片进去
cd /usr/local/nginx/html
2. #在网页中查看
http://192.168.59.118/game.png
1.2隐藏版本信息
方法一:修改配置文件
1.#修改配置文件
vim /usr/local/nginx/conf/nginx.conf
2.#重启nginx
systemctl restart nginx
3.#查看版本是否被隐藏
curl -I http://192.168.59.118
```handlebars
http {
include mime.types;
default_type application/octet-stream;
server_tokens off; #添加,关闭版本号
......
}
方法二: 修改源码文件,重新编译安装
1. #切换至nginx安装包所在目录
cd /opt/
2. #停止nginx服务
systemctl stop nginx.service
3. #切换至安装目录
cd nginx-1.12.0/
4. #切换至内核目录
cd src/core/
5. #进入配置文件
vim nginx.h
#define NGINX_VERSION "yxp"
#define NGINX_VER "yyy/" NGINX_VERSION
6. #切换至文件目录
cd ../../
7. #编译
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
8. #安装
make && make install -j4
9. #将配置文件下的之前关闭版本信息开启
vim /usr/local/nginx/conf/nginx.conf
server_tokens on;
10. #重启nginx
systemctl restart nginx
11. #查看版本信息
curl -I http://192.168.59.118
二、修改用户与组
1. #修改配置文件
vim /usr/local/nginx/conf/nginx.conf
user lili lili; #取消注释,修改用户为 lili ,组为 lili
2. #创建非登录用户
useradd -s /sbin/nologin lili
3. #重启服务
systemctl restart nginx
4. #查看是否修改成功
ps aux | grep nginx
三、缓存时间
当nginx将网页数据返回给客户端后,可设置缓存时间,以方便在日后进行相同内容的请求时直接返回,避免重复请求,加快了访问速度一般针对静态网页设置,对动态网页不设置缓存时间。
1. #修改配置文件
vim /usr/local/nginx/conf/nginx.conf
#添加以下内容
location ~ \.(jpg|png|bmp|gif)$ {
root html;
expires 1d;
}
2. #查看是否有语法错误
nginx -t
3. #重启服务
systemctl restart nginx.service
4.#在网页中查看服务
http://192.168.59.118/game.png
Cahce-Control:max-age=86400 表示缓存时间是 86400 秒。也就是缓存一天的时间,一天之内浏览器访问这个页面,都是用缓存中的数据,而不需要向 Nginx 服务器重新发出请求,减少了服务器的使用带宽。
四、日志分割
随着Nginx运行时间的增加,产生的日志也会逐渐增加,为了方便掌握Nginx的运行状态,需要时刻关注Nginx日志文件。太大的日志文件对监控是一个大灾难,不便于分析排查,需要定期的进行日志文件的切割。
1. #写脚本
vim /usr/local/nginx/nginx_log.sh
#!/bin/bash
#this is for divide nginx log
d=$(date +%F -d -1day) #显示前一天的时间
path="/var/log/nginx"
pid="/usr/local/nginx/logs/nginx.pid"
[ -d $path ] ||mkdir -p $path #创建日志文件目录
mv /usr/local/nginx/logs/access.log ${path}/www.yxp.com-$d #移动并重命名日志文件
kill -USR1 $(cat $pid) #重建新日志文件
find $path -mtime +30 -delete #删除30天之前的日志文件
2. #赋予权限
chmod +x /usr/local/nginx/nginx_log.sh
3. #计划任务
[root@localhost nginx]#crontab -e
30 1 * * * /usr/local/nginx/nginx_log.sh
编写脚本
计划任务
五、连接超时
HTTP服务有一个KeepAlive模式,它告诉web服务器在处理完一个请求后保持这个TCP连接的打开状态若接收到来自同一客户端的其他请求,服务端会利用这个被被关闭的连接,而不需要再次建立一个连接
KeepAlive在一段时间内保持打开状态,它们会在这段时间内占用资源,占用过多就会影响服务器的性能
在企业网站中,为了避免同一个客户长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间。可以修改配置文件 nginx.conf,设置 keepalive_timeout超时时间。
1. #修改配置文件
vim /usr/local/nginx/conf/nginx.conf
#keepalive_timeout 0;
keepalive_timeout 65 180;
2. #重启nginx服务
systemctl restart nginx.service
3. #在网页中测试
http://192.168.59.118/game.png
修改配置文件 重启服务
在网页测试
六、更改进程数
在高并发场景,需要启动更多的Nginx进程以保证快速响应,以处理用户的请求,避免造成阻塞
1. #统计cpu核数
cat /proc/cpuinfo |grep processor|wc -l
或
cat /proc/cpuinfo |grep -c processor
2. #查看目前有的核数
ps -aux |grep nginx
3. #修改 Nginx 的配置文件worker_processes 参数,一般设为 CPU 的个数或者核数,在高并发的情况下可设置为 CPU 个数或者核数的 2 倍,可以查看 CPU 的核数以确定参数。
vim /usr/local/nginx/conf/nginx.conf
worker_processes 16;
4. #重启服务并查看
systemctl restart nginx.service
ps -aux |grep nginx
统计cpu核数
修改 Nginx 的配置文件
七、网页压缩
-
Nginx的ngx_http_gzip_module压缩模块提供对文件内容压缩的功能
-
允许Nginx服务器将输出内容在发送客户端之前进行压缩,以节约网站带宽,提升用户的访问体验,默认已经安装可在配置文件中加入相应的压缩功能参数对压缩性能进行优化
1. #修改配置文件
gzip on; #取消注释,开启gzip压缩功能
gzip_min_length 1k; #最小压缩文件大小
gzip_buffers 4 16k; #压缩缓冲区,大小为4个16k缓冲区
gzip_http_version 1.1; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
gzip_comp_level 6; #压缩比率
gzip_vary on; #支持前端缓存服务器存储压缩页面
gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss image/jpg image/jpeg image/png image/gif application/x-httpd-php application/javascript application/json; #压缩类型,表示哪些网页文档启用压缩功能
2. #重启服务
systemctl restart nginx.service
3. #网页查看
http://192.168.59.118/game.png
八、配置防盗链
-
在企业网站服务中,一般都要配置防盗链功能,以避免网站内容被非法盗用,造成经济损失,也避免了不必要的带宽浪费。
-
Nginx 的防盗链功能也非常强大,在默认情况下,只需要进行很简单的配置,即可实现防盗链处理。
8.1 网页准备
##盗链网站主机(192.168..59.108)网页准备
1. #再开一台centos服务器,安装httpd
yum install -y httpd
2. #切换至/var/www/html
cd /var/www/html
vim index.html
<html>
<body>
<h1>this is yxp
<img src="http://www.yxp.com/game.jpg"/>
</body>
</html>
3. #在Web源主机(192.168.59.118)添加域名
vim /etc/hosts
192.168.59.118 www.yxp.com
4. #在Web源主机(192.168.59.118)添加图片
vim /usr/local/nginx/html/index.html
<img src="game.png">
5. #在盗链网站主机(192.168..59.108)添加域名
192.168.59.118 www.yxp.com
192.168.59.108 www.dhc.com
6. #在盗链网站开启服务,并在网页中测试
systemctl start httpd
再开一台centos服务器,安装httpd
切换至/var/www/html
在Web源主机(192.168.59.118)添加域名
在Web源主机(192.168.59.118)添加图片
在盗链网站主机(192.168..59.108)添加域名
在盗链网站开启服务,并在网页中测试
8.2 配置防盗链
1. #在Web源主机(192.168.59.118)
vim /usr/local/nginx/conf/nginx.conf
location ~* \.(jpg|swf)$ {
valid_referers none blocked *.yxp.com yxp.com;
if ( $invalid_referer ) {
rewrite ^/ http://www.yxp.com/error.png;
}
}
2. #检查语法是否有错
nginx -t
3. #将盗图图片拖进去
cd /usr/local/nginx/html/
4. #重启服务
systemctl restart nginx.service
5. #在网页测试
源主机网页: http://www.yxp.com/
盗链主机网页: http://www.dhc.com/