全球主机交流论坛

标题: nginx大佬进来 [打印本页]

作者: zxjlhsq    时间: 2022-4-21 20:30
标题: nginx大佬进来
本帖最后由 zxjlhsq 于 2022-4-21 20:40 编辑

想禁掉QQ浏览器访问 用NGINX实现方法

这是简单的代码 访问时会404默认页面
            if ($http_user_agent ~* "QQBrowser") {
                return 404;
            }


        location / {
            proxy_pass http://127.0.0.1:88/;
}



可我想实现这样的 有个友好404页面   结果报错


            if ($http_user_agent ~* "QQBrowser") {
                root /home/404.html;
            }


        location / {
            proxy_pass http://127.0.0.1:88/;
}
作者: 心上人    时间: 2022-4-21 20:33
楼下大佬会                          
作者: Salta    时间: 2022-4-21 20:34
那你直接 return 404;  看看行不行?
作者: zxjlhsq    时间: 2022-4-21 20:39
Salta 发表于 2022-4-21 20:34
那你直接 return 404;  看看行不行?

直接404  和 403 效果一样   是默认的nginx页面   我想弄个自定义的404.html
作者: tiga    时间: 2022-4-21 21:35
改 error_page 不就行了

  1.   error_page 404 /404.html;

  2.   if ($http_user_agent ~* "QQBrowser") {
  3.     return 404;
  4.   }
复制代码

作者: Waylon    时间: 2022-4-21 22:17



if ($http_user_agent ~* "QQBrowser") {
rewrite ^/(.*)$  /404.html break;
}

404.html放在WEB根目录
作者: 2life.top    时间: 2022-4-21 22:32
zxjlhsq 发表于 2022-4-21 20:39
直接404  和 403 效果一样   是默认的nginx页面   我想弄个自定义的404.html

你自己另外做一个页面不就好了,return qq.html这样
作者: zxjlhsq    时间: 2022-4-21 23:02
Waylon 发表于 2022-4-21 22:17
if ($http_user_agent ~* "QQBrowser") {
rewrite ^/(.*)$  /404.html break;
}

谢谢 我试试
作者: zxjlhsq    时间: 2022-4-21 23:12
tiga 发表于 2022-4-21 21:35
改 error_page 不就行了

return 404;   并不调用  error_page  /404.html      还是默认的404
作者: zxjlhsq    时间: 2022-4-21 23:13
Waylon 发表于 2022-4-21 22:17
if ($http_user_agent ~* "QQBrowser") {
rewrite ^/(.*)$  /404.html break;
}

不行, 先执行pass 反代了  没有先执行 rewrite ^/(.*)$  /404.html break;

除非 这里也用 pass 反代 才会执行  估计有个优先级
作者: 叼爆小朋友    时间: 2022-4-22 09:36
本帖最后由 叼爆小朋友 于 2022-4-22 09:39 编辑

404错误页面放到404文件夹里面,if语句写到location反代里面。return后面加上404页面的绝对地址,return https://xxx.com/404/404.html;xxx.com必须是一个新地址,不能用网站本身地址,因为你原来的地址用来反代了。
作者: 柒焰    时间: 2022-4-22 09:38
本帖最后由 柒焰 于 2022-4-22 09:41 编辑

用error_page就可以了,要不然就让指定来路的重定向到你写的404页
作者: zxjlhsq    时间: 2022-4-22 10:04
叼爆小朋友 发表于 2022-4-22 09:36
404错误页面放到404文件夹里面,if语句写到location反代里面。return后面加上404页面的绝对地址,return ht ...

是的 不能用本身的  要用新地址    为了这个 还用要一个新地址  ~~
作者: zxjlhsq    时间: 2022-4-22 10:15
柒焰 发表于 2022-4-22 09:38
用error_page就可以了,要不然就让指定来路的重定向到你写的404页

可能 反代有关  error_page 并不能生效。
作者: coolloves    时间: 2022-4-22 10:48
首先,nginx.conf主配文件需要开启 proxy_intercept_errors on;
然后 error_page 404  /your404.html;
所有404就会变成你自定义的



                                        那么可爱的小尾巴,不让你看!  
作者: zxjlhsq    时间: 2022-4-22 10:52
coolloves 发表于 2022-4-22 10:48
首先,nginx.conf主配文件需要开启 proxy_intercept_errors on;
然后 error_page 404  /your404.html;
所有4 ...

感谢我去测试一下
作者: zxjlhsq    时间: 2022-4-22 11:05
coolloves 发表于 2022-4-22 10:48
首先,nginx.conf主配文件需要开启 proxy_intercept_errors on;
然后 error_page 404  /your404.html;
所有4 ...


还是不行 当判断是QQ浏览时     if ($http_user_agent ~* "QQBrowser") {

打开 页面 your404.html  还是默认的404  进入了无限循环   要像楼上的说的  不能调用本身的404页面,  要调用其它链接 就行了
作者: zxxx    时间: 2022-4-22 11:10
return 200 '<HTML>....</HTML>'
作者: zxjlhsq    时间: 2022-4-22 11:18
本帖最后由 zxjlhsq 于 2022-4-22 11:23 编辑

如果访问是域名首页 123.com  就是 提示  下载 文件   内容就是 HTML     如果是其它页面 123.com/1.html 就正常。。这是怎么回事?
作者: zxxx    时间: 2022-4-22 11:21
zxjlhsq 发表于 2022-4-22 11:18
试了一下  如果不用 pass 反代 是成功的。   但如果加了 pass 反代后   打开 直接提示 下载文件
下载的 ...

add_header 'Content-Type' 'text/html;charset=utf-8';
Return ....
作者: zxjlhsq    时间: 2022-4-22 11:31
zxxx 发表于 2022-4-22 11:21
add_header 'Content-Type' 'text/html;charset=utf-8';
Return ....


这样加  nginx 提示报错,
if ($http_user_agent ~* "Chrome") {
add_header 'Content-Type' 'text/html;charset=utf-8';
Return ....


加上面就正常了。  
add_header 'Content-Type' 'text/html;charset=utf-8';
if ($http_user_agent ~* "Chrome") {
Return ....



但带来的结果如果不是Chrome 浏览器 就会有两个
Content-Type: text/html; charset=utf-8
Content-Type: text/html; charset=utf-8
作者: chenxuhua    时间: 2022-4-22 11:41
root 只能指定目录 不能指定文件
作者: zxjlhsq    时间: 2022-4-22 11:43
zxxx 发表于 2022-4-22 11:21
add_header 'Content-Type' 'text/html;charset=utf-8';
Return ....

default_type text/html; 加这个 也报错   判断规则 里面貌似不能加这些
作者: Cllp    时间: 2022-4-22 11:43
            if ($http_user_agent ~* "密码") {
             ;

如果开启TLS  并且 自定义修改浏览器user_agent为密码,是不是相当于加密了。
作者: zxjlhsq    时间: 2022-4-22 11:46
Cllp 发表于 2022-4-22 11:43
if ($http_user_agent ~* "密码") {
             ;

你真是个小机灵鬼
作者: zxjlhsq    时间: 2022-4-22 11:52
zxxx 发表于 2022-4-22 11:21
add_header 'Content-Type' 'text/html;charset=utf-8';
Return ....


解决了    放到  location里面 即可。。 搞不懂 为什么location里面就不报错  放在外面就报错

最后 感谢大佬!!!  并贴上代码。

location / {

  if ($http_user_agent ~* "Chrome") {
        add_header 'Content-Type' 'text/html;charset=utf-8';
        return 200 '<HTML>123</HTML>';
  }




欢迎光临 全球主机交流论坛 (https://91ai.net/) Powered by Discuz! X3.4