凉凉90

导航

nginx避免反复重定向

nginx避免反复重定向
2021-08-29 12:20:51

本文提要:转载https://www.csdn.net/tags/NtzaggwsNjM1NzAtYmxvZwO0O0OO0O0O.html


目录

 

一.为nginx增加网站认证功能

二.实现安全加密网站

三.动静分离

四.地址重写

1:相同网站内的页面跳转

2.相同网站内的页面跳转,地址栏会变化

3.从旧网站跳到新网站

4.不同网站的相同页面的跳转

5.为浏览器用户设置专属页面(为了方便书写这里就用火狐代替了)

地址重写的选项

五.Nginx集群代理服务器

六.集群的优化

1.调节集群主机任务量分配

2.健康检查

3.相同客户机访问相同服务器

4.添加down 标记避免重复登陆)

5.查看网站后台数据

6.缓存文件在客户端

7.优化nginx支持超长地址栏(不用加模块)

8.优化nginx并发

七.使用nginx创建其他业务集群

八.解决集群主机过多而导致用户重复登陆网站

1.安装memcache数据库(内存数据是临时的)

2.测试数据库

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服务

posted on 2022-09-28 09:54  凉凉90  阅读(1040)  评论(0编辑  收藏  举报