nginx避免反复重定向
本文提要:转载https://www.csdn.net/tags/NtzaggwsNjM1NzAtYmxvZwO0O0OO0O0O.html
目录
5.为浏览器用户设置专属页面(为了方便书写这里就用火狐代替了)
3.最后在服务器主机修改session存储的位置,实现session共享
一.为nginx增加网站认证功能
auth_basic "password:"; //网页弹出的提示信息(不会直接显示信息)(认证) auth_basic_user_file "/usr/local/nginx/pass"; //存放网站账户(密码)的文件
yum -y install httpd-tools //安装软件包,可以支持htpasswd命令 htpasswd -c pass tom //创建pass文件与tom账户,还要输入两次密码(cat pass查看) 文件也可以用绝对路径/usr/local/nginx/pass或在当前使用相对路径pass htpasswd pass abc //多追加一个账户测试(加-c代表创建新文件,追加不需要加c选项,加c则前面的用户作废,也不需要再创建文件)
二.实现安全加密网站
server {
listen 443 ssl;
server_name www.c.com; //这里修改域名
ssl_certificate cert.pem; //证书,包含公钥
ssl_certificate_key cert.key; //私钥
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html_c; //这里修改页面存储目录
index index.html index.htm;
}
}
三.动静分离
location ~ \.php$ { //~是使用正则表达式,匹配用户输入的内容以.php结尾
root html; //网站页面位置,不用改,保持默认
fastcgi_pass127.0.0.1:9000;//一旦用户访问了.php结尾的文件,就让nginx找后台的php-fpm(端口号9000)
该配置文件要于 /etc/php-fpm.d/www.conf 文件的地址对应
fastcgi_index index.php; //动态网站的默认页面,无需修改
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; //无用
行,保持注释状态
include fastcgi.conf; //这里需要修改名称
}
四.地址重写
1:相同网站内的页面跳转
server {
listen 80;
server_name localhost;
rewrite ^/a.html$ /b.html; //相同网站不同页面
charset utf-8;
access_log logs/host.access.log main;
root html;
index index.html index.htm;
}
2.相同网站内的页面跳转,地址栏会变化
server {
listen 80;
server_name localhost;
rewrite ^/a.html$ /b.html redirect; //在刚刚的配置中添加redirect
charset utf-8;
access_log logs/host.access.log main;
root html;
index index.html index.htm;
}
3.从旧网站跳到新网站
server {
listen 80;
server_name localhost;
rewrite / http://www........; //访问192.168.2.5就跳到...
charset utf-8;
access_log logs/host.access.log main;
root html;
index index.html index.htm;
}
4.不同网站的相同页面的跳转
server {
listen 80;
server_name localhost;
rewrite /(.*) http://www...../$1; //访问老网站的某个页面时,跳转到新网站对应的相同页面。前面使用正则表达式匹配用户输入的任意页面,并保存起来(小括号在正则中的效果是保留,相当于复制),后面使用$1将之前保
存的页面地址粘贴到新网站
charset utf-8;
access_log logs/host.access.log main;
root html;
index index.html index.htm;
}
5.为浏览器用户设置专属页面(为了方便书写这里就用火狐代替了)
server {
listen 80;
server_name localhost;
rewrite /(.*) /firefox/$1; //就进行地址重写操作,让用户看到火狐专属页面
}
//$http_user_agent是nginx的内置变量,存储了用户的信息,比如用的什么浏览器
~匹配正则 *忽略大小写
charset utf-8;
access_log logs/host.access.log main;
root html;
index index.html index.htm;
}
地址重写的选项
last 不再读其他
rewrite break 不再读其他语句
redirect 临时重定向 状态码302 爬虫不更新URI
permanent 永久重定向 状态码 301 爬虫更新 URI
选项测试1:last 不再读其他rewrite
server {
listen 80;
server_name localhost;
rewrite /a.html /b.html last; //如果没有last,看a页面会得到c页面
rewrite /b.html /c.html;
charset utf-8;
access_log logs/host.access.log main;
root html;
index index.html index.htm;
}
选项测试2:break 不再读其他语句
location / { //此处为默认的location
rewrite /a.html /b.html break; //将last改为break可以阻止后面的语句
root html;
index index.html index.htm;
}
location /b.html { //这里是新添加的location
rewrite /b.html /c.html;
}
五.Nginx集群代理服务器
http {
upstream web { //
server 192.168.2.100:80; //这里是集群中的服务器ip与端口
server 192.168.2.200:80; //第二台集群主机
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://web; //在虚拟主机调用集群
root html;
index index.html index.htm;
}
}
六.集群的优化
1.调节集群主机任务量分配
在上述配置中改:server 192.168.2.200:80 weight=2; //权重,值越大,分配的任务量越多
2.健康检查
在上述配置中改:server 192.168.2.200:80 max_fails=2 fail_timeout=30; //检测两次如果失败,则认为集群中的主机故障,之后等待30秒再次测试
3.相同客户机访问相同服务器
upstream web {
ip_hash; //相同客户机访问相同服务器,让一个客户机访问集群时锁定
一个后台服务器,避免重复登陆的问题
server 192.168.2.100:80;
server 192.168.2.200:80 max_fails=2 fail_timeout=30;
}
4.添加down 标记避免重复登陆)
upstream web {
ip_hash;(相同客户访问相同服务器)
server 192.168.2.100:80;
server 192.168.2.200:80 down; //添加down标记,使集群主机
暂时不参与集群任务
}
5.查看网站后台数据
--with-http_stub_status_module //利用到的模块
location /status { //在error_page行上面添加此内容
stub_status on;(显示后台数据)(这里就可以测试)
allow 192.168.2.5; //只允许2.5查看(如果不加这个的话,只要有人知道status都可以访问)
deny all; //拒绝其他主机
}
sbin/nginx -s reload //重加载配置 下课休息 17:45回
Curl 192.168.2.5/status 或(firefox 192.168.2.5/status) //查看页面
Active connections:当前活动的连接数量(当前有多少用户访问该网站)。
Accepts:已经接受客户端的连接总数量。
Handled:已经处理客户端的连接总数量。
Requests:客户端发送的请求数量。
Reading:当前服务器正在读取客户端请求头的数量。
Writing:当前服务器正在写响应信息的数量。
Waiting:当前多少客户端在等待服务器的响应。
6.缓存文件在客户端
一台服务器的相同数据可能会被同一个客户反复访问,为了不重复让服务器给客户传递相同数据,达到节约资源、节省时间的目的,我们可以进行以下优化配置
location(匹配) ~* \.(jpg|html|txt|png)$ { //当用户访问的是这几种类型的文件 expires 30d; //都会缓存在客户机上30天 }
7.优化nginx支持超长地址栏(不用加模块)
默认情况下nginx无法支持长地址栏,会报414错误
打开配置文件,在默认的虚拟主机上方添加两行
client_header_buffer_size 200k; //第一行表示,用户访问网站的头部信
息(包含地址栏)长度支持200k大小
large_client_header_buffers 4 200k; //第二行表示,如果200k不够,再
给4个200k
8.优化nginx并发
并发:多数用户同时对网站发起访问,并发量支持的越高,说明网站性能越强。
默认情况下nginx并发仅仅支持1024个,需要修改配置才能增加
worker_processes 2; //开启的nginx进程数量,通常是随cpu的核心数一致 worker_connections 50000; //每个nginx进程支持的并发访问量
七.使用nginx创建其他业务集群
./configure --with-stream --with-http_stub_status_module //这里的--with-stream 是添加四层代理模块,可以用来创建其他业务集群(查看网站后台数据)
stream { //创建新业务(在网站http外面)
upstream backend { //创建名叫backend的集群(后端)(可以自定义)
server 192.168.2.100:22; //集群中的主机使用22端口对外提供服务
server 192.168.2.200:22;
}
server {
listen 12345; //监听端口号
proxy_pass backend; //调用集群(不是网站服务不用加http)
}
}
ssh 192.168.2.5 -p 12345 //尝试远程登录,第一次可能会连接集群的某一台主机比如web1
八.解决集群主机过多而导致用户重复登陆网站
在一个集群中,如果网站需要用户输入用户名和密码登陆之后才能继续访问,那么当用户登陆其中一台集群主机之后随着继续访问页面,请求可能被代理服务器轮询到另外一台服务器上,那么对于另外一台服务器来说用户并没有登陆,想查看登陆之后的页面还需要再次登陆,这样集群主机越多需要客户重复登陆的次数就越多,想要解决该问题就要从Session与Cookies入手
Session:存储在服务器端,保存用户名、登陆状态等信息。
Cookies:由服务器下发给客户端,保存在客户端的一个文件里。
保存的内容主要包括:SessionID
了统一session存储的位置(该存储方式通常被称为session共享),需要安装专门的数据库工具 memcache 可以利用内存存储数据的高性能数据库服务
1.安装memcache数据库(内存数据是临时的)
yum -y install memcached telnet //装包
systemctl start memcached //启动服务
netstat -ntulp | grep memcached //查询服务器
2.测试数据库
telnet 127.0.0.1 11211 连接莫种服务的方法 //登录到memcached服务进行测试 set abc 0 200 3 //创建变量abc,0是不压缩数据,存活时间200秒,存3个字符(然后写内容) get abc //查询abc变量中的数据 replace abc 0 200 3 //覆盖abc变量的数据(如果abc不存在则失败) delete abc //删除abc flush_all //删除所有数据 add abc 0 200 3 //创建变量abc(如果abc存在则失败) quit
3.最后在服务器主机修改session存储的位置,实现session共享
vim /etc/php-fpm.d/www.conf //按G到最后一页 php_value[session.save_handler] = memcache //这里改成memcache,表示session(file:文件)的存储不在是本地的普通文件,而是去找memcache php_value[session.save_path] = tcp://192.168.2.5:11211 //这里的路径修改为 安装了memcache服务的服务器地址与端口(指定内存数据库服务端) yum -y install php-pecl-memcache //安装php与memcached服务关联的软件包 systemctl restart php-fpm //重启php-fpm服务