Site updated: 2022-11-30 17:30:45
This commit is contained in:
1 parent
8f7e7bb1bb
commit
c249e91983
129 files changed
+146
-146
No files matched your search
@@ -25,14 +25,14 @@
|
||||
"url": "https://blog.jingxiyuan.cn/2022/11/30/Nginx%E5%8A%A8%E6%80%81%E8%A7%A3%E6%9E%90%E5%9F%9F%E5%90%8D%E6%96%B9%E6%A1%88/",
|
||||
"title": "Nginx动态解析域名方案",
|
||||
"date_published": "2022-11-30T08:35:00.000Z",
|
||||
"content_html": "<h4 id=\"应用场景\"><a class=\"anchor\" href=\"#应用场景\">#</a> 应用场景:</h4>\n<p>由于有时候 nginx 代理的时候,第三方域名对应的 ip 可能发生变化,然而没有提前通知,然而如果不配置什么,nginx 又不能智能解析,因此 nginx 动态解析域名就比较重要。</p>\n<h4 id=\"一-使用模块nginx-upstream-dynamic-servers\"><a class=\"anchor\" href=\"#一-使用模块nginx-upstream-dynamic-servers\">#</a> 一、使用模块 nginx-upstream-dynamic-servers</h4>\n<p>该模块在启动 nginx 的时候会对域名进行一次解析,解析完成后,在 DNS 服务器设定的 TTL 过期时间内不会再次更新,在 TTL 过期后则会再次发起域名解析请求更新域名所对应的 IP 地址。</p>\n<p>需要在 nginx 的配置文件中的 http 配置域内指定使用的 DNS 服务器,在 upstream 中需要进行域名解析的 server 后面添加 resolve 参数。</p>\n<p>例:</p>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre>http <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre></pre></td></tr><tr><td data-num=\"3\"></td><td><pre> resolver ip;</pre></td></tr><tr><td data-num=\"4\"></td><td><pre></pre></td></tr><tr><td data-num=\"5\"></td><td><pre> upstream test <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"6\"></td><td><pre></pre></td></tr><tr><td data-num=\"7\"></td><td><pre> server www.xxx.com<span class=\"token punctuation\">:</span>8080 resolve;</pre></td></tr><tr><td data-num=\"8\"></td><td><pre></pre></td></tr><tr><td data-num=\"9\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"10\"></td><td><pre></pre></td></tr><tr><td data-num=\"11\"></td><td><pre> server <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"12\"></td><td><pre></pre></td></tr><tr><td data-num=\"13\"></td><td><pre> listen 8080;</pre></td></tr><tr><td data-num=\"14\"></td><td><pre></pre></td></tr><tr><td data-num=\"15\"></td><td><pre> client_body_buffer_size 10m;</pre></td></tr><tr><td data-num=\"16\"></td><td><pre></pre></td></tr><tr><td data-num=\"17\"></td><td><pre> server_name localhost;</pre></td></tr><tr><td data-num=\"18\"></td><td><pre></pre></td></tr><tr><td data-num=\"19\"></td><td><pre> location / <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"20\"></td><td><pre> </pre></td></tr><tr><td data-num=\"21\"></td><td><pre> proxy_pass http<span class=\"token punctuation\">:</span>//test;</pre></td></tr><tr><td data-num=\"22\"></td><td><pre> </pre></td></tr><tr><td data-num=\"23\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"24\"></td><td><pre> </pre></td></tr><tr><td data-num=\"25\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"26\"></td><td><pre></pre></td></tr><tr><td data-num=\"27\"></td><td><pre><span class=\"token punctuation\">}</span></pre></td></tr></table></figure><p>缺点:</p>\n<p>1、每次解析域名之后,会从 DNS 服务器获取到改 DNS 的 TTL,在 TTL 期限内不会再次解析,所以如果目标域名发生改变,nginx 不会更新解析,知道 TTL 过期。</p>\n<p>2、DNS 服务器在 http 配置域配置全,不能在 location 中细分指定。</p>\n<h4 id=\"二-使用模块ngx_upstream_jdomain\"><a class=\"anchor\" href=\"#二-使用模块ngx_upstream_jdomain\">#</a> 二、使用模块 ngx_upstream_jdomain</h4>\n<p>在 http 配置域中配置 DNS 服务器,在 upstream 中按照这个模块的格式配置,支持设置每隔多少秒进行一次解析(抓包分析过设置 interval 可指定解析间隔),如果解析失败则使用缓存中的上一次解析结果的 IP 地址访问。</p>\n<p>例:</p>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre>http <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre></pre></td></tr><tr><td data-num=\"3\"></td><td><pre> resolver ip;</pre></td></tr><tr><td data-num=\"4\"></td><td><pre></pre></td></tr><tr><td data-num=\"5\"></td><td><pre> upstream test <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"6\"></td><td><pre></pre></td></tr><tr><td data-num=\"7\"></td><td><pre> jdomain www.xxx.com port=8080 interval=10; <span class=\"token comment\">#指定域名和端口,每隔 10 秒进行一次解析</span></pre></td></tr><tr><td data-num=\"8\"></td><td><pre></pre></td></tr><tr><td data-num=\"9\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></trLine truncated
|
||||
"content_html": "<h4 id=\"应用场景\"><a class=\"anchor\" href=\"#应用场景\">#</a> 应用场景:</h4>\n<p>由于有时候 nginx 代理的时候,第三方域名对应的 ip 可能发生变化,然而没有提前通知,然而如果不配置什么,nginx 又不能智能解析,因此 nginx 动态解析域名就比较重要。</p>\n<h4 id=\"使用模块nginx-upstream-dynamic-servers\"><a class=\"anchor\" href=\"#使用模块nginx-upstream-dynamic-servers\">#</a> 使用模块 nginx-upstream-dynamic-servers</h4>\n<p>该模块在启动 nginx 的时候会对域名进行一次解析,解析完成后,在 DNS 服务器设定的 TTL 过期时间内不会再次更新,在 TTL 过期后则会再次发起域名解析请求更新域名所对应的 IP 地址。</p>\n<p>需要在 nginx 的配置文件中的 http 配置域内指定使用的 DNS 服务器,在 upstream 中需要进行域名解析的 server 后面添加 resolve 参数。</p>\n<p>例:</p>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre>http <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre></pre></td></tr><tr><td data-num=\"3\"></td><td><pre> resolver ip;</pre></td></tr><tr><td data-num=\"4\"></td><td><pre></pre></td></tr><tr><td data-num=\"5\"></td><td><pre> upstream test <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"6\"></td><td><pre></pre></td></tr><tr><td data-num=\"7\"></td><td><pre> server www.xxx.com<span class=\"token punctuation\">:</span>8080 resolve;</pre></td></tr><tr><td data-num=\"8\"></td><td><pre></pre></td></tr><tr><td data-num=\"9\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"10\"></td><td><pre></pre></td></tr><tr><td data-num=\"11\"></td><td><pre> server <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"12\"></td><td><pre></pre></td></tr><tr><td data-num=\"13\"></td><td><pre> listen 8080;</pre></td></tr><tr><td data-num=\"14\"></td><td><pre></pre></td></tr><tr><td data-num=\"15\"></td><td><pre> client_body_buffer_size 10m;</pre></td></tr><tr><td data-num=\"16\"></td><td><pre></pre></td></tr><tr><td data-num=\"17\"></td><td><pre> server_name localhost;</pre></td></tr><tr><td data-num=\"18\"></td><td><pre></pre></td></tr><tr><td data-num=\"19\"></td><td><pre> location / <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"20\"></td><td><pre> </pre></td></tr><tr><td data-num=\"21\"></td><td><pre> proxy_pass http<span class=\"token punctuation\">:</span>//test;</pre></td></tr><tr><td data-num=\"22\"></td><td><pre> </pre></td></tr><tr><td data-num=\"23\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"24\"></td><td><pre> </pre></td></tr><tr><td data-num=\"25\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"26\"></td><td><pre></pre></td></tr><tr><td data-num=\"27\"></td><td><pre><span class=\"token punctuation\">}</span></pre></td></tr></table></figure><p>缺点:</p>\n<p>1、每次解析域名之后,会从 DNS 服务器获取到改 DNS 的 TTL,在 TTL 期限内不会再次解析,所以如果目标域名发生改变,nginx 不会更新解析,知道 TTL 过期。</p>\n<p>2、DNS 服务器在 http 配置域配置全,不能在 location 中细分指定。</p>\n<h4 id=\"使用模块ngx_upstream_jdomain\"><a class=\"anchor\" href=\"#使用模块ngx_upstream_jdomain\">#</a> 使用模块 ngx_upstream_jdomain</h4>\n<p>在 http 配置域中配置 DNS 服务器,在 upstream 中按照这个模块的格式配置,支持设置每隔多少秒进行一次解析(抓包分析过设置 interval 可指定解析间隔),如果解析失败则使用缓存中的上一次解析结果的 IP 地址访问。</p>\n<p>例:</p>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre>http <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre></pre></td></tr><tr><td data-num=\"3\"></td><td><pre> resolver ip;</pre></td></tr><tr><td data-num=\"4\"></td><td><pre></pre></td></tr><tr><td data-num=\"5\"></td><td><pre> upstream test <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"6\"></td><td><pre></pre></td></tr><tr><td data-num=\"7\"></td><td><pre> jdomain www.xxx.com port=8080 interval=10; <span class=\"token comment\">#指定域名和端口,每隔 10 秒进行一次解析</span></pre></td></tr><tr><td data-num=\"8\"></td><td><pre></pre></td></tr><tr><td data-num=\"9\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"10\"></tLine truncated
|
||||
"tags": [
|
||||
"Linux",
|
||||
"服务",
|
||||
"Nginx",
|
||||
"Nginx",
|
||||
"Tengine",
|
||||
"动态域名解析"
|
||||
"动态域名解析",
|
||||
"Tengine"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -40,14 +40,14 @@
|
||||
"url": "https://blog.jingxiyuan.cn/2022/11/30/Nginx%E9%85%8D%E7%BD%AEstream%E8%B8%A9%E5%9D%91/",
|
||||
"title": "Nginx配置stream踩坑",
|
||||
"date_published": "2022-11-30T08:09:00.000Z",
|
||||
"content_html": "<h4 id=\"引言\"><a class=\"anchor\" href=\"#引言\">#</a> 引言</h4>\n<p>stream 模块一般用于 TCP/UDP 数据流的代理和负载均衡,可以通过 stream 模块代理转发 TCP 消息。我是用来转发 mysql、gitee 等连接的,结果有天 ip 发生了变动导致连接不上。前期试过配置<span class=\"blue\"> resolver 114.114.114.114 valid=60s;</span> 来动态解析域名,结果 stream 模块不支持 set 函数,这就导致 ip 变动后必须手动重启或者 reload 一下 nginx 才能正常连接。后面经过搜索发现有人说用 Tengine 替代 nginx 可以实现就试了试,结果发现<span class=\"red\"> Tengine 只能实现 http 下的动态域名解析</span>,至此问题依旧。没办法,我只能通过定时任务加脚本判断 ip 是否变动,如果变动就 reload 一下 nginx。</p>\n<figure class=\"highlight bash\"><figcaption data-lang=\"bash\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token shebang important\">#!/bin/bash</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre><span class=\"token comment\">#使用 crontab -e 命令添加定时任务 */1 * * * * sh /home/xxx/autoReloadNginx.sh</span></pre></td></tr><tr><td data-num=\"3\"></td><td><pre><span class=\"token assign-left variable\">home</span><span class=\"token operator\">=</span><span class=\"token string\">\"/home/xxx\"</span> <span class=\"token comment\">#指定 home 路径,如果使用 `pwd` 则 domainIP.txt 生成在当前用户目录下</span></pre></td></tr><tr><td data-num=\"4\"></td><td><pre><span class=\"token assign-left variable\">domain</span><span class=\"token operator\">=</span>xxx.xxx.cn</pre></td></tr><tr><td data-num=\"5\"></td><td><pre><span class=\"token assign-left variable\">IP</span><span class=\"token operator\">=</span><span class=\"token variable\"><span class=\"token variable\">`</span><span class=\"token function\">ping</span> <span class=\"token parameter variable\">-4</span> <span class=\"token parameter variable\">-c</span> <span class=\"token number\">4</span> $domain <span class=\"token operator\">|</span> <span class=\"token function\">grep</span> from <span class=\"token operator\">|</span> <span class=\"token function\">tail</span> <span class=\"token parameter variable\">-n</span> <span class=\"token number\">1</span> <span class=\"token operator\">|</span> <span class=\"token function\">awk</span> <span class=\"token parameter variable\">-F</span> <span class=\"token string\">' '</span> <span class=\"token string\">'{print $4}'</span><span class=\"token variable\">`</span></span></pre></td></tr><tr><td data-num=\"6\"></td><td><pre><span class=\"token assign-left variable\">regex</span><span class=\"token operator\">=</span><span class=\"token string\">\"<span class=\"token entity\" title=\"\\b\">\\b</span>(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[1-9])\\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[1-9])<span class=\"token entity\" title=\"\\b\">\\b</span>\"</span></pre></td></tr><tr><td data-num=\"7\"></td><td><pre><span class=\"token keyword\">if</span> <span class=\"token punctuation\">[</span> <span class=\"token variable\"><span class=\"token variable\">`</span><span class=\"token builtin class-name\">echo</span> $IP <span class=\"token operator\">|</span> <span class=\"token function\">egrep</span> $regex <span class=\"token operator\">|</span> <span class=\"token function\">wc</span> <span class=\"token parameter variable\">-l</span><span class=\"token variable\">`</span></span> <span class=\"token parameter variable\">-eq</span> <span class=\"token number\">1</span> <span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">then</span></pre></td></tr><tr><td data-num=\"8\"></td><td><pre> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">[</span> <span class=\"token operator\">!</span> <span class=\"token parameter variable\">-f</span> <span class=\"token string\">\"<span class=\"token variable\">$home</span>/domainIP.txt\"</span> <span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">then</span></pre></td></tr><tr><td data-num=\"9\"></td><td><pre> <span class=\"token function\">touch</span> <span class=\"token variable\">$home</span>/domainIP.txt</pre></td></tr><tr><td data-num=\"10\"></td><td><pre> <span class=\"token builtin class-name\">echo</span> <span class=\"token variable\">$IP</span> <span class=\"token operator\">></span> <span class=\"token variable\">$home</span>/domainIP.txt</pre></td></tr><tr><td data-num=\"11\"></td><td><pre> <span class=\"token keyword\">else</span></pre></td></tr><tr><td data-num=\"12\"></td><td><pre> <span class=\"token assignLine truncated
|
||||
"content_html": "<h4 id=\"引言\"><a class=\"anchor\" href=\"#引言\">#</a> 引言</h4>\n<p>stream 模块一般用于 TCP/UDP 数据流的代理和负载均衡,可以通过 stream 模块代理转发 TCP 消息。我是用来转发 mysql、gitee 等连接的,有天 ip 发生了变动导致连接不上。前期试过配置<span class=\"blue\"> resolver 114.114.114.114 valid=60s;</span> 来动态解析域名,结果 stream 模块不支持 set 函数,这就导致 ip 变动后必须手动重启或者 reload 一下 nginx 才能正常连接。后面经过搜索发现有人说用 Tengine 替代 nginx 可以实现就试了试,结果发现<span class=\"red\"> Tengine 只能实现 http 下的动态域名解析</span>,至此问题依旧。没办法,我只能通过定时任务加脚本判断 ip 是否变动,如果变动就 reload 一下 nginx。</p>\n<figure class=\"highlight bash\"><figcaption data-lang=\"bash\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token shebang important\">#!/bin/bash</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre><span class=\"token comment\">#使用 crontab -e 命令添加定时任务 */1 * * * * sh /home/xxx/autoReloadNginx.sh</span></pre></td></tr><tr><td data-num=\"3\"></td><td><pre><span class=\"token assign-left variable\">home</span><span class=\"token operator\">=</span><span class=\"token string\">\"/home/xxx\"</span> <span class=\"token comment\">#指定 home 路径,如果使用 `pwd` 则 domainIP.txt 生成在当前用户目录下</span></pre></td></tr><tr><td data-num=\"4\"></td><td><pre><span class=\"token assign-left variable\">domain</span><span class=\"token operator\">=</span>xxx.xxx.cn</pre></td></tr><tr><td data-num=\"5\"></td><td><pre><span class=\"token assign-left variable\">IP</span><span class=\"token operator\">=</span><span class=\"token variable\"><span class=\"token variable\">`</span><span class=\"token function\">ping</span> <span class=\"token parameter variable\">-4</span> <span class=\"token parameter variable\">-c</span> <span class=\"token number\">4</span> $domain <span class=\"token operator\">|</span> <span class=\"token function\">grep</span> from <span class=\"token operator\">|</span> <span class=\"token function\">tail</span> <span class=\"token parameter variable\">-n</span> <span class=\"token number\">1</span> <span class=\"token operator\">|</span> <span class=\"token function\">awk</span> <span class=\"token parameter variable\">-F</span> <span class=\"token string\">' '</span> <span class=\"token string\">'{print $4}'</span><span class=\"token variable\">`</span></span></pre></td></tr><tr><td data-num=\"6\"></td><td><pre><span class=\"token assign-left variable\">regex</span><span class=\"token operator\">=</span><span class=\"token string\">\"<span class=\"token entity\" title=\"\\b\">\\b</span>(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[1-9])\\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[1-9])<span class=\"token entity\" title=\"\\b\">\\b</span>\"</span></pre></td></tr><tr><td data-num=\"7\"></td><td><pre><span class=\"token keyword\">if</span> <span class=\"token punctuation\">[</span> <span class=\"token variable\"><span class=\"token variable\">`</span><span class=\"token builtin class-name\">echo</span> $IP <span class=\"token operator\">|</span> <span class=\"token function\">egrep</span> $regex <span class=\"token operator\">|</span> <span class=\"token function\">wc</span> <span class=\"token parameter variable\">-l</span><span class=\"token variable\">`</span></span> <span class=\"token parameter variable\">-eq</span> <span class=\"token number\">1</span> <span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">then</span></pre></td></tr><tr><td data-num=\"8\"></td><td><pre> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">[</span> <span class=\"token operator\">!</span> <span class=\"token parameter variable\">-f</span> <span class=\"token string\">\"<span class=\"token variable\">$home</span>/domainIP.txt\"</span> <span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">then</span></pre></td></tr><tr><td data-num=\"9\"></td><td><pre> <span class=\"token function\">touch</span> <span class=\"token variable\">$home</span>/domainIP.txt</pre></td></tr><tr><td data-num=\"10\"></td><td><pre> <span class=\"token builtin class-name\">echo</span> <span class=\"token variable\">$IP</span> <span class=\"token operator\">></span> <span class=\"token variable\">$home</span>/domainIP.txt</pre></td></tr><tr><td data-num=\"11\"></td><td><pre> <span class=\"token keyword\">else</span></pre></td></tr><tr><td data-num=\"12\"></td><td><pre> <span class=\"token assign-left Line truncated
|
||||
"tags": [
|
||||
"Linux",
|
||||
"服务",
|
||||
"Nginx",
|
||||
"Nginx",
|
||||
"stream",
|
||||
"Tengine"
|
||||
"Tengine",
|
||||
"stream"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user