11—3(nginx)

1.防止字符乱码

charset utf-8;

2.重定向页面

 error_page 503 @temp;
    location @temp {
        default_type text/html;
        return 302(可以跳转到页面) 'https://www.baidu.com';
        }

3.什么是CGI

早期 Web 服务器与后端脚本(如 PHP、Perl、Python)通信的标准协议。

4.为什么会有FastCGI?

本质是为解决传统 CGI 在高并发场景下的性能瓶颈而设计的 “增强版 CGI 协议”

5.什么是php-fpm

PHP-FPM(FastCGI Process Manager:FastCGI进程管理器)是一个实现了Fastcgi的程序,并且提供进程管理的功能

6.(项目)Ubuntu设置时间跟文件大小

[root@ubuntu2204 ~]#vim /etc/php/8.1/fpm/php.ini
date.timezone = Asia/Shanghai
post_max_size = 100M         #限制整个 POST 请求的总数据量
upload_max_filesize = 100M   #仅限制单个上传文件的大小

7.(项目)Ubuntu设置端口的及响应的

[root@ubuntu2204 ~]#vim /etc/php/8.1/fpm/pool.d/www.conf
listen = 127.0.0.1:9000
;listen = /run/php/php8.1-fpm.sock
pm.status_path = /pm_status   #设置查看其状态的
ping.path = /ping             #设置查看是否ping通(回应的)

8.解决Ubuntu数据库所有服务器上都可用网络接口

[root@ubuntu2204 ~]#vi /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address            = 0.0.0.0

9.什么是会话保持

当用户登陆一个网站服务器,网站服务器会将用户的登陆信息存储下来,以保证我们能够一直处于 ”登陆在线“ 状态。
客户端:cookies
服务端:sessionID

10.(会话保持)解决工具

redis

redis-cli  #查看session 信息
127.0.0.1:6379> keys *
1) "PHPREDIS_SESSION:393ff522ed2a7e26ba44f6d925f991f2"

11.根据不同的URL请求调度到不同的资源池

[root@proxy01 conf.d]# cat proxy_agent.ops.net.conf
upstream user {
    server 172.16.1.8;
}

upstream pass {
    server 172.16.1.7;
}

server {
    listen 80;
    server_name agent.ops.net;
    location /user {
        proxy_pass http://user;
        include proxy_params;
}

    location /pass {
        proxy_pass http://pass;
        include proxy_params;
    }
}

12.Proxy添加/与不添加/

1.带 / 意味着Nginx代理会修改用户请求的URL,将location匹配的URL进行删除。
2.不带 / 意味着Nginx代理不会修改用户请求的URL,而是直接代理到后端应用服务器。

13.根据请求设备进行调度

# 根据不同的浏览器调度到不同的资源池
[root@proxy01 conf.d]# cat proxy_agent.ops.net.conf
upstream pc {
    server 172.16.1.7:80;
}

upstream phone {
    server 172.16.1.8:80;
}

server {
    listen 80;
    server_name agent.ops.net;
    location / {
        #默认都走pc
        proxy_pass http://pc;
        include proxy_params;
        default_type text/html;
        charset utf-8;
        
        #如果是安卓或iphone,则走phone
        if ( $http_user_agent ~* "android|iphone|iPad" ) {
            proxy_pass http://phone;
        }
        #如果是IE浏览器,要么拒绝,要么返回一个好的浏览器下载页面
        if ( $http_user_agent ~* "MSIE" )
{
            return 200 '浏览器真棒!';
        }
    }
}

#区别就是$http_user_agent 后面跟的内容不同

11—4(nginx)

Rewrite 生产案例实践

  • ^ 表示字符串的开始

  • / 表示匹配根路径本身

  • $ 表示字符串的结束

所以 ^/$ 专门匹配网站的根路径访问,也就是用户直接访问

1.据用户浏览器请求头中携带的语言调度到不同的页面

    if ($http_accept_language ~* "zhCN|zh") {
        set $language /zh;
    }
    
    if ($http_accept_language ~* "en") {
        set $language /en;
    }
    
    rewrite ^/$ /$language; 

2.用户通过手机设备访问 url.ops.net,跳转至url.ops.net/m

if ($http_user_agent ~* "android|iphone|ipad") {
        rewrite ^/$ /m;
    }
echo m > /code/m/index.html

3.用户通过手机设备访问 url.ops.net 跳转至m.ops.net

 if ($http_user_agent ~* "android|iphone|ipad") {
        rewrite ^/$ http://m.ops.net;
        }
    }

4.用户通过http协议请求,能自动跳转至https协议

server {    
listen 80;    
server_name url.ops.net;    
rewrite ^(.*)$ https://$server_name$1 redirect;    
#return 302 https://$server_name$request_uri;
}
server {    
listen 443;    
server_name url.ops.net;    
ssl on;
}

5.网站在维护过程中,希望用户访问所有网站重定向至一个维护页面

rewrite ^(.*)$ /wh.html break;

6.当服务器遇到 403 404 502 等错误时,自动转到临时维护的静态页

error_page 404 403 502 = @tempdown;
    location @tempdown {
            rewrite ^(.*)$ /wh.html break;
    }

7.司网站在停机维护时,指定的IP能够正常访问,其他的IP跳转到维护页。

 set $ip 0;
    
    if ($remote_addr ~* "10.0.0.101|10.0.0.102") {
           set $ip 1;
    }
    
 
    if ($ip = 0) {
        rewrite ^(.*)$ /wh.html break;
    }

8.公司网站后台/admin,只允许公司的出口公网IP可以访问,其他的IP访问全部返回500,或直接跳转至首页

location /admin {
    set $ip 0;
    if ( $remote_addr ~* "61.149.186.152|139.226.172.254" ) {
        set $ip 1;
    }

    if ($ip = 0){
        return 500;
        #rewrite /(.*)$ https://url.ops.net redirect;
    }
}

9.匹配域名,然后将第一个字段赋值给domain

if ( $host ~* (.*)\.(.*)\.(.*) ) {
set $domain $1;
}	
rewrite ^/(.*) http://demo:27610/$domain$request_uri redirect;
}

结果:http://demo:27610/url/bbb

10.现有两台服务器,想要实现http://console.ops.net/index.php?r=sur/index/sid/613192/lang/zh-Hans若访问资源为/index.php?r=survey...则跳转到http://sur.ops.net/index.php?

location / {
        if ($args ~ r=survey) {
            rewrite ^/(.*) http://sur.ops.net$request_uri? redirect;
        }

11.用户请求http://url.ops.net/?id=2,替换为 http://url.ops.net/id/2.html

location / {
    if ($args ~* "id") {
        set $OK 1;
    }
        
    if ($args ~* (.*)\=(.*) ) {
        set $id $1;
        set $number $2;
    }
        
    if ( $OK = "1" ) {
        # ?这个尾缀,重定向的目标地址结尾处如果加了?号,则不会再转发传递过来原地址问号内容
        rewrite ^(.*)$ http://${server_name}/${id}/${number}.html? last;
        }
    }

12.禁止搜索引擎爬取站点

if ($http_user_agent ~* "YisouSpider|YoudaoBot|tt") {
          return 403;
          }

13.禁止站点资源被盗用

   location ~ .*\.(jpg|jpeg|gif|png)$ {
        valid_referers none blocked *.ops.com;
来源域名如何合法,invalid_referer这个变量被设置为0,否则为1
    if ($invalid_referer) {
        rewrite ^(.*)$ /error.gif break;
        }
    }

11—5

把证书安装和nginx平滑升级做个笔记