一、实现nginx配置文件基础优化
实现nginx版本号隐藏
HTTP段中加入 server_tokens off;
使用curl命令可以查看nginx版本号已经隐藏
优化前
优化后
实现网页压缩
http段找到gzip on
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss;
调整最大连接数
events {
use epoll;
worker_connections 10240;
}
10240即为调整值,调整到更高可以增大并发量
二:nginx实现多种扩展功能
Nginx的状态统计
安装nginx时已经将--with-http_stub_status_module 模块开启
修改nginx配置文件(写入要访问的server标签中)
vim /usr/local/nginx/conf/nginx.conf
平行于上一个location
连接命令
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/nginx
nginx -t 检测语法
重启nginx
service nginx restart
输入网址http://192.168.1.10/nginx_status
目录保护功能(本实验状态统计页面加入认证,继续上个实验)
在状态统计的location中添加:
auth_basic "Welcome to nginx_status!";
auth_basic_user_file /usr/local/nginx/html/htpasswd.nginx;
使用http的命令htpasswd进行用户(user)密码文件的创建(生成在上面指定的位置,此处下载httpd,并输入自定义密码)
htpasswd -c /usr/local/nginx/html/htpasswd.nginx user
重启nginx并再次访问统计页面http://192.168.1.10/nginx_status
service nginx restart
基于IP的身份验证(访问控制)
vim /usr/local/nginx/conf/nginx.conf
在状态统计的location中添加:
allow 192.168.1.11
deny 192.168.1.0/24
允许192.168.1.10访问,本网段其他IP都禁止访问
主机(本主机虚拟网卡IP为192.168.1.1)登录http://192.168.1.10/nginx_status
使用11主机测试
elinks 192.168.1.10/nginx_status
设置缓存时间
缓存时间1小时
nginx的虚拟主机(基于域名)
方法:
提前准备好两个网站的域名,并且规划好两个网站网页存放目录
在Nginx主配置文件中并列编写两个server标签,并分别写好各自信息
分别访问两个不同的域名验证结果
创建网页目录,建立网页
cd /usr/local/nginx/html/
创建两个目录blog和bbs
在blog创建 blog.index:blog.yun211.com
在bbs创建 bbs.index:bbs.aliyun.com
修改hosts主机域名解析
vim /etc/hosts
修改配置文件
vim /usr/local/nginx/conf/nginx.conf
删除上个实验的location /nginx_status标签
取消log_format注释
增加两个server(额外两个虚拟主机)
将上面的php粘贴下来,修改路经(让php解析nginx)
nginx -t 检查后检测
elinks blog.yun211.com
elinks bbs.yun211.com
nginx的反向代理
简介
正向代理和反向代理
正向代理:找别人代替你去完成一件你完不成的事(例如代购),代理的对象是客户端
反向代理:替厂家卖东西的人就叫反向代理(例如烟酒代理),代理的对象是服务器端,对服务器是一种保护
add:服务端产生的日志默认记录的都是nginx代理服务器的IP
proxy代理选项
proxy_pass_header field 发送头部信息
proxy_hide_header field 隐藏头部信息
proxy_pass_request_body on|off 是否将客户端请求的内容发送给服务器,默认是on
proxy_pass_request_headers on|off 是否将客户端请求的头部信息发送给服务器,默认是on
proxy_set_header
proxy_connect_timeout 时间 nginx代理与后端服务器连接时间默认是60s
proxy_buffering on|off; 开启或关闭缓冲,默认是开启
proxy_buffers 数量(8) 大小(4k)大小一般与内存页的大小相同
proxy_cache 缓存
proxy_cache on|off zone设置用于存放花村索引的内存区域的名称
实验一、操作目标:让nginx做apache的反向代理服务器
11端开启httpd服务
开启一台服务器(这里我用192.168.1.11),安装httpd
cd /var/www//html/
echo "www.11.com" >index.html
10(nginx反向代理)端
vim /usr/local/nginx/conf/nginx.conf
elinks blogs.yun211.com
成功访问到httpd服务器
实验二、通过代理服务器获取客户端的IP
准备lamp架构一组安装在12服务器端,当客户端从11服务器上访问头部为php结尾的,则直接转交给lamp服务器
配置信息
nginx中配置:
location ~ \.php$ {
proxy_pass http://192.168.2.14;
proxy_set_header Host $host;
proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;
proxy_set_header X-real-ip $remote_addr;
}
apache 2.4中配置:
apache 2.4中配置追加:
RemoteIPHeader X-Forwarded-for
RemoteIPInternalProxy 192.168.1.11
在access.log日志格式中添加%a:
LogFormat "%h %a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
测试
查看日志 tail /etc/httpd/logs/access_log
配置前
配置后
第一条数据192.168.1.11是代理服务器的IP,第二段是客户端IP(192.168.1.1)
nginx负载均衡
负载均衡(Load Balance)其意思就是将任务分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
nginx轮询调度算法
1 轮询
2 加权轮询(默认)
接收到的请求按照顺序逐一分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。 这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。
3 ip_hash
每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。
4 url_hash
按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在nginx作为静态服务器的情况下提高缓存效率。同样要注意nginx默认不支持这种调度算法,要使用的话需要安装nginx的hash软件包
5 fair
智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;结合了前两者(加权轮巡和IP_hash)的优点的一种调度算法。但是需要注意的是nginx默认不支持fair算法,如果要使用这种调度算法,请安装upstream_fair模块
结构图
apache对动态页面处理更加稳定,单个apache性能较低,当多个apache进行处理时,nginx反向代理服务器可以将用户请求均衡到apache上,既实现了反向代理,又实现了负载均衡。
实验操作
环境准备:将10作为nginx负载均衡服务器,11和12是apache服务器,使用的域名是blog.yun211.com
11、12服务器
开启12服务器,下载httpd,在/var/www/html 创建index.html
echo "www.11(2).com" >/var/www/html/index.html
systemctl start httpd
10端部署nginx服务器
vim /usr/local/nginx/conf/nginx.conf
修改之前的location / 标签
重启服务
curl blog.yun211.com
拓展补充:rr算法实现加权轮询
修改配置文件:
实现压力分配比为2:1
nginx实现https和证书rewrite功能
安装nginx时,需要将--with-http_ssl_module 模块开启
在对应要进行加密的server标签中添加以下内容开启SSL
实验操作
对bbs进行加密
配置文件
vim /usr/local/nginx/conf/nginx.conf
创建认证
cd /usr/local/nginx/conf
mkdir ssl ; cd ssl
openssl genrsa -out yun211.key 1024
在实验环境中可以用命令生成测试,在生产环境中必须要在https证书厂商注册
建立服务器私钥,生成RSA密钥
openssl req -new -key yun211.key -out yun211.key.csr
需要依次输入国家,地区,组织,email。最重要的是有一个common name,可以写你的名字或者域名。如果为了https申请,这个必须和域名吻合,否则会引发浏览器警报。生成的csr文件交给CA签名后形成服务端自己的证书
openssl x509 -req -days 365 -sha256 -in yun211.key.csr -signkey yun211.key -out yun211.crt
生成签字证书
设置http自动跳转https功能
原有的server标签修改监听端口改为443
新加入server
检测 nginx -t 重启 service nginx restart
使用windows进行检测(mac直接修改hosts文件即可)
修改hosts文件
C:\Windows\System32\drivers\etc
追加
测试
输入http://bbs.yun211.com
域名镜像
完全相同的网站分别放置到不同服务器上,并分别使用独立的url
作用:流量负载
配置简介:
"^"代表www.yun211.com
"/"代表从www.yun211.com/ 之后的“/”
目的:实现多个服务器共同分担访问压力
实验:
配置10
开启服务器11
建立一个blog.yun211.com的域名然后建立和www.yun211.com相同的目录文件
10端
11端
测试:
防盗链
书写格式:
valid_referers none|blocked|server_name …
获取referer头域中的值,并会给$invalid_referer变量赋值
none代表请求头中没有referer信息,这一般是直接在浏览器输入图片网址
blocked代表被防火墙过滤标记过的请求
举个例子:
实验:
配置详解
图片资源源站服务器配置
可以进行配置的选项
条件这样写:
如果连接的来源不是www.tupian.com的域(不区分大小写),则强制跳转到http://bbs.yunban.cn/error.jpg ,若不设置错误页面,可以返回 403 报错
盗链网站服务器配置
vim /usr/local/nginx/html/index.html
mkdir /usr/local/nginx/html/pictures 源站建立图片目录,加入一张图片a.jpg
不取消注释尝试访问www.toutu.com
取消注释重新加载尝试
动静分离
准备
目的:实现了动态PHP 语言由 LAMP 服务器提供解析(192.168.1.11),静态图片由 Nginx 服务器提供解析(192.168.1.10)
服务器准备
nginx服务器:192.168.1.10
httpd服务器:192.168.1.11
安装nginx(10端)
安装依赖
yum -y install gcc gcc-c++ make
yum -y install pcre-devel zlib-devel
useradd -M -s /sbin/nologin nginx
解包
tar xf nginx-1.6.0.tar.gz
cd nginx-1.6.0
配置
./configure --prefix=/usr/local/nginx1.6 --user=nginx --group=nginx -with-http_stub_status_module --with-http_ssl_module
编译,安装
make && make install
ln -s /usr/local/nginx1.6 /usr/local/nginx
ln /usr/local/nginx/sbin/nginx /usr/sbin/nginx
vim /usr/local/nginx/conf/nginx.conf
根目录指定在/web
location ~ \.php$ {
proxy_pass http://192.168.1.11:80;
}
location ~ \.(gif|jpg|jpeg|bmp|png|swf) {
root /web/;
}
指定当匹配为php结尾的数据去lamp服务器拿,当匹配到指静态图片的文件,到本地拿
开启服务
nginx -t
nginx
创建网页根目录的静态图片和初始页面:
mkdir /web;cd /web
echo "<h1>nginx ok<h1>" > /web/index.html
加入一张图片测试:
lamp准备:
下载lamp服务:
yum -y install httpd mariadb mariadb-server php php-mysql
初始化数据库:
systemctl start mariadb
mysqladmin -uroot password 123
mysql -uroot -p123
测试httpd-php-mysql连通性
systemctl start httpd
vim /var/www/html/test.php
<?php
$link=mysql_connect('localhost','root','123');
if($link) echo "<h1>mysql-php successful</h1>";
mysql_close();
?>
测试登陆页面 http://192.168.1.11/test.php
当访问静态页面,回(nginx)去拉取
echo "<img src=http://192.168.1.10/1.jpg>" >>/var/www/html/test.php
测试:http://192.168.1.11/test.php
测试:
静态页面nginx代理本地找
动态页面lamp找
当动态页面需要静态内容时,回来找静态页面的内容(在html中配置下src即可,前端开发的操作)
发布者:LJH,转发请注明出处:https://www.ljh.cool/5872.html