Nginx

分类下相关文章

.net 8 asp.net core 开发的网站偶尔报 503 错误, 没想到竟然是 Nginx 限速配置导致

现象 实际现象并不是页面直接报 503,而是一个用 vuejs 开发的在线二维码生成工具,后台是 asp.net core。 偶尔会出现 vue 变量不渲染的情况,而且我印象中,一个周遇到 3 次了。 今天在使用这个页面时,又遇到了。不能再拖延了,现在动手排查一下。 从浏览器的调试窗口中,可以看到实际上是在加载一个 js 文件时,报了 503 错误。 我们知道 HTTP 503 状态码代表: 服务器过载:当服务器接收到的请求量超过其处理能力时,可能会返回 HTTP 503 错误 通常是进行了请求限速之后,会触发这个错误。因为大家一般不使用 429 来直接提示请求过多。 惯性思维 因为这个网 ...

阅读全文...

Nginx 配置将域名 xxx.com 301 跳转至 www.xxx.com

例如,我想将域名 sunzhongwei.com 自动跳转到 www.sunzhongwei.com。 Nginx 配置 server { # 默认是 80 端口 server_name sunzhongwei.com; return 301 $scheme://www.sunzhongwei.com$request_uri; } 验证配置,并重新加载配置 nginx -t nginx -s reload 使用 certbot 自动安装免费的 SSL 证书,并自动修改 Nginx 配置 certbot --nginx -d sunzhongwei.com cert ...

阅读全文...

在 Nginx 日志中记录请求的真实 IP,而非 CloudFlare 的节点 IP

最近发现 Joomla 搭建的网站中出现了大量的垃圾评论。 从 Nginx 日志里的行为看是通过程序自动提交的,而非手动提交。因为提交成功后,没有自动跳转到成功页。 暂时不确定对方是如何绕过 recaptcha V2 的验证组件的。。。 于是,想先通过简单粗暴的方式,看看对方的请求 IP 是否有规律。(虽然希望渺茫) 但 Nginx access log 记录的是 cloudflare 节点的 IP (reverse proxy network),而非用户的真实 IP。 查询了一下如何通过更改 Nginx 配置来记录访客的真实 IP。 配置 有个 github 上的配置,可以参考: https ...

阅读全文...

Nginx 添加 Access-Control-Allow-Origin 头,允许跨域请求

No 'Access-Control-Allow-Origin' header 想从 js 前端实现拉取一个服务端的 markdown 文件,然后在浏览器端渲染成 HTML。 但是本地开发环境调试时报错: Access to XMLHttpRequest at 'https://www.sunzhongwei.com/some_file.md' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on th ...

阅读全文...

Nginx 转发 HTTP 及 WebSocket 请求到另一个域名的配置

注意!!! 虽然这个配置能达到预期的效果,但是这个配置有 301 问题,暂时没有找到问题根源。 还是对 Nginx 的具体规则不了解。alias,rewrite, redirect 得重新学习下。 需求场景 通过修改本地 hosts 文件,将目标域名的 IP 指向我的服务器,转发所有请求。 同时, 拦截指定 API 接口,返回特定的内容。参考了好多年之前写的 Nginx 模拟 Backbone 请求的 JSON 接口 修改部分 html,js 以达到修改界面的效果 中转 websocket 请求 存在的问题 几个 alias 用的不对,会导致请求 301 到带斜杠后缀的链接。但好在能正 ...

阅读全文...

systemd timer 未启用,导致 certbot 证书自动续期失败

春节期间收到了公司服务器上一个域名证书快要过期的提示邮件。 今天第一天开工,正好处理一下。 很奇怪,这个服务器上基于 letsencrypt 生成的免费证书,总是不自动续期。 日志地址 ls /var/log/letsencrypt 查看了一下,都是手动操作的日志,没有自动续期产生的日志。说明计划任务没有自动执行? 而我在另一台自动续期执行正常的服务器上看,自动续期是会产生日志的。 所以,问题的根源,还是命令没有定期执行。 手动续期 先手动解决,然后再排查问题 > certbot renew Saving debug log to /var/log/letsencrypt/letsen ...

阅读全文...

Nginx 301 重定向原网址到新地址

需求背景 我有一个现存的服务,地址为: https://www.sunzhongwei.com/go/proportion-calculator 而我又重构了一套,新的网址为: https://www.sunzhongwei.com/tools2/proportion-calculator 我想将原来地址的访问流量 301 重定向到新网址。 Nginx 规则优先级 参考我之前整理的 nginx location 常见匹配规则 Nginx Location 规则并不是按照书写顺序进行优先匹配的。 而是按照规则优先级进行匹配。 所以这里使用 = 等号,来提高 301 规则的优先级。 Nginx ...

阅读全文...

EMQX MQTT 服务配置 WSS 证书

为何要配置 WSS 证书 原本用 EMQX 内置的 8083 端口,就可以实现 mqtt over websocket。 例如,地址: ws://www.sunzhongwei.com:8083/mqtt 但是,由于我又需要在微信小程序里使用 mqtt over websocket,而微信小程序只允许使用 WSS 和 HTTPS 协议。所以不得不配置证书。 WSS 与 WS 的区别 WSS 全称是 Web Socket Secure, 即 WebSocket 的加密版本。类似与 HTTPS 之于 HTTP。 WSS 与 WS 类似于 HTTPS 和 HTTP,不同之处在于是不同的通信协议,都 ...

阅读全文...

nginx 中禁用 css, js,图片等静态资源的日志记录

对于网站的 nginx 日志,三分之二以上是 css js 及图片等静态文件的访问日志。 禁用静态文件日志的好处 提升 IO 性能,避免无意义的写入磁盘操作 便于实时查看 nginx 日志 禁用方法 修改全局 nginx.conf 文件 log_format compression '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" &qu ...

阅读全文...

ubuntu 20.04 禁止 apache 开机自启动

ubuntu 20.04 server 重启之后,发现 nginx 没有自启动。 而手动启动 nginx,报错,显示 80 端口被占用。 $ sudo nginx [sudo] password for xxx: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) nginx: [emerg] bind() to [::]:80 failed (98: Address already in use) 排查 无疑,很大概率系统预装了 apache。可能系统重启时,apache 先于 nginx 启动, ...

阅读全文...

certbot 安装证书报错:The requested nginx plugin does not appear to be installed

系统环境 Ubuntu 20.04 报错信息 # certbot --nginx Saving debug log to /var/log/letsencrypt/letsencrypt.log The requested nginx plugin does not appear to be installed 解决方法 sudo apt install python3-certbot-nginx 然后重新执行 certbot --nginx ...

阅读全文...

Nginx 多配置文件放哪个目录好,sites-available/enabled 与 conf.d 对比

从 nginx.conf 的 http block 配置来看,ubuntu 20.04 apt 安装的 nginx 默认引入了两个配置目录: include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; sites-available & sites-enabled 以前就知道,但是 conf.d 还是第一次注意到。 之所以会注意到 conf.d 是因为在 stackoverflow 上看到一个讨论 https://serverfault.com/questions/527630/difference-in ...

阅读全文...

ubuntu 20.04 apt install nginx-core/light/full 的区别

在新购的服务器系统 Ubuntu 20.04 上部署生产环境。想通过 apt 安装 nginx,发现提示中有N个选项: $ nginx Command 'nginx' not found, but can be installed with: apt install nginx-core # version 1.18.0-0ubuntu1, or apt install nginx-extras # version 1.18.0-0ubuntu1 apt install nginx-full # version 1.18.0-0ubuntu1 apt install ngin ...

阅读全文...

设置 Nginx 规则以屏蔽指定 User Agent 的网站爬虫

晚上我的一个 wordpress 网站再一次被可恶的爬虫爬挂了。。。 对方疯狂的爬取网页,且瞬间并发无数个请求,丝毫不考虑我这孱弱的阿里云低配服务器的小身板能否承受住。不出意外,我的网站挂掉了。。。 没办法,必须得处理一下。 看了一下 nginx 日志中这些爬虫的请求记录: 每 10 个请求一换 IP 请求头都为 "Scrapy/1.7.3 (+https://scrapy.org)" 所以通过 IP 规则来屏蔽是不可能了,可以简单地用 User Agent 匹配规则的方式来屏蔽这些爬虫。 Nginx 配置 顺便把 Yisou 的爬虫屏蔽了。 if ($http_use ...

阅读全文...

certbot 自动配置 HTTPS 证书时,指定 nginx 配置文件路径

今天在一台 CentOS 7.3 的服务器上配置新网站域名的 HTTPS 证书,Web Server 用的 Nginx。 certbot 提示 nginx.conf 文件找不到。 # certbot --nginx Saving debug log to /var/log/letsencrypt/letsencrypt.log Error while running nginx -c /etc/nginx/nginx.conf -t. nginx: [emerg] open() "/etc/nginx/nginx.conf" failed (2: No such file ...

阅读全文...