Site updated: 2022-11-08 12:40:58

This commit is contained in:
qinglong
2022-11-08 12:41:00 +08:00
parent 53430dc3e3
commit f5b51694a7
106 changed files with 315 additions and 220 deletions

100
atom.xml
View File

@ -48,18 +48,51 @@ __反向代理__看下面原理图就一目了然。其实客户端对代
<p>配置文件中有很多 #号,该符号表示注释内容,去掉所有以 #开头的段落精简之后的配置文件内容如下PS其实注释掉的地方都是一些功能的使用代码需要用到的时候取消注释即可</p>
</li>
</ul>
<figure class="highlight xml"><figcaption data-lang="XML"></figcaption><table><tr><td data-num="1"></td><td><pre># 主进程叫master负责管理子进程子进程叫worker</pre></td></tr><tr><td data-num="2"></td><td><pre># worker_processes配置项表示开启几个业务进程一般和cpu核数有关</pre></td></tr><tr><td data-num="3"></td><td><pre>worker_processes 1;</pre></td></tr><tr><td data-num="4"></td><td><pre></pre></td></tr><tr><td data-num="5"></td><td><pre>events {</pre></td></tr><tr><td data-num="6"></td><td><pre> worker_connections 1024;</pre></td></tr><tr><td data-num="7"></td><td><pre>}</pre></td></tr><tr><td data-num="8"></td><td><pre></pre></td></tr><tr><td data-num="9"></td><td><pre>http {</pre></td></tr><tr><td data-num="10"></td><td><pre> # include表示可以引入其他文件此处表示引入http mime类型</pre></td></tr><tr><td data-num="11"></td><td><pre> include mime.types;</pre></td></tr><tr><td data-num="12"></td><td><pre> default_type application/octet-stream;</pre></td></tr><tr><td data-num="13"></td><td><pre> sendfile on;</pre></td></tr><tr><td data-num="14"></td><td><pre> keepalive_timeout 65;</pre></td></tr><tr><td data-num="15"></td><td><pre></pre></td></tr><tr><td data-num="16"></td><td><pre> # 虚拟主机,可以配置多个</pre></td></tr><tr><td data-num="17"></td><td><pre> server {</pre></td></tr><tr><td data-num="18"></td><td><pre> listen 80;</pre></td></tr><tr><td data-num="19"></td><td><pre> server_name localhost;</pre></td></tr><tr><td data-num="20"></td><td><pre></pre></td></tr><tr><td data-num="21"></td><td><pre> location / {</pre></td></tr><tr><td data-num="22"></td><td><pre> # 路径匹配之后,哪个目录下去匹配相应的网页,html是相对路径</pre></td></tr><tr><td data-num="23"></td><td><pre> root html;</pre></td></tr><tr><td data-num="24"></td><td><pre> index index.html index.htm;</pre></td></tr><tr><td data-num="25"></td><td><pre> }</pre></td></tr><tr><td data-num="26"></td><td><pre></pre></td></tr><tr><td data-num="27"></td><td><pre> error_page 500 502 503 504 /50x.html;</pre></td></tr><tr><td data-num="28"></td><td><pre> location = /50x.html {</pre></td></tr><tr><td data-num="29"></td><td><pre> root html;</pre></td></tr><tr><td data-num="30"></td><td><pre> }</pre></td></tr><tr><td data-num="31"></td><td><pre> }</pre></td></tr><tr><td data-num="32"></td><td><pre>}</pre></td></tr></table></figure><p>去掉注释信息后,可以将 nginx.conf 配置文件分为三部分:</p>
<pre><code class="language-yaml"># 主进程叫master负责管理子进程子进程叫worker
# worker_processes配置项表示开启几个业务进程一般和cpu核数有关
worker_processes 1;
events {
worker_connections 1024;
}
http {
# include表示可以引入其他文件此处表示引入http mime类型
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 虚拟主机,可以配置多个
server {
listen 80;
server_name localhost;
location / {
# 路径匹配之后,哪个目录下去匹配相应的网页,html是相对路径
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
</code></pre>
<p>去掉注释信息后,可以将 nginx.conf 配置文件分为三部分:</p>
<ol>
<li>全局块</li>
</ol>
<pre><code class="language-conf">worker_processes 1;
<pre><code class="language-yaml">worker_processes 1;
</code></pre>
<p>从配置文件开始到 events 块之间的内容,主要会设置一些影响 Nginx 服务器整体运行的配置指令,主要包括:配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。</p>
<p>上面这行 worker_processes 配置,是 Nginx 服务器并发处理服务的关键配置,该值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的约束。</p>
<ol start="2">
<li>events 块</li>
</ol>
<pre><code class="language-conf">events {
<pre><code class="language-yaml">events {
worker_connections 1024;
}
</code></pre>
@ -68,7 +101,7 @@ __反向代理__看下面原理图就一目了然。其实客户端对代
<ol start="3">
<li>http 块</li>
</ol>
<pre><code class="language-conf">http {
<pre><code class="language-yaml">http {
include mime.types;
default_type application/octet-stream;
sendfile on;
@ -98,25 +131,24 @@ __反向代理__看下面原理图就一目了然。其实客户端对代
<ol>
<li>location 配置规则</li>
</ol>
<pre><code class="language-conf">location [ = | ~ | ~* | ^~ | @ ] /uri {
<pre><code class="language-yaml">location [ = | ~ | ~* | ^~ | @ ] /uri {
}
= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
~:用于表示 uri 包含正则表达式,并且区分大小写。
~*:用于表示 uri 包含正则表达式,并且不区分大小写。
^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location
后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。
@: "@" 定义一个命名的 location使用在内部定向时例如 error_page
/uri不带任何修饰符也表示前缀匹配但是在正则匹配之后如果没有正则命中命中最长的规则
/通用匹配任何未匹配到其它location的请求都会匹配到相当于switch中的default
=   :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
~ :用于表示 uri 包含正则表达式,并且区分大小写。
~* :用于表示 uri 包含正则表达式,并且不区分大小写。
^~ :用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的location后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。
@ : "@" 定义一个命名的 location使用在内部定向时例如 error_page
/uri :不带任何修饰符,也表示前缀匹配,但是在正则匹配之后,如果没有正则命中,命中最长的规则
/ 通用匹配任何未匹配到其它location的请求都会匹配到相当于switch中的default
* uri没有“/”结尾时location /abc/def可以匹配/abc/defghi请求也可以匹配/abc/def/ghi等。而有“/”结尾时location /abc/def/不能匹配/abc/defghi请求只能匹配/abc/def/anything这样的请求
☆☆☆☆☆ uri没有“/”结尾时location /abc/def可以匹配/abc/defghi请求也可以匹配/abc/def/ghi等。而有“/”结尾时location /abc/def/不能匹配/abc/defghi请求只能匹配/abc/def/anything这样的请求
</code></pre>
<ol start="2">
<li>proxy_pass 配置规则</li>
</ol>
<pre><code class="language-conf">url结尾加上了/相当于是绝对路径则Nginx不会把location中匹配的路径部分加入代理uri。
<pre><code class="language-yaml">url结尾加上了/相当于是绝对路径则Nginx不会把location中匹配的路径部分加入代理uri。
url结尾不加/Nginx则会把匹配的路径部分加入代理uri。
情景1:
@ -173,7 +205,7 @@ location /model {
}
</code></pre>
<h4 id="nginx完整配置文件"><a class="anchor" href="#nginx完整配置文件">#</a> Nginx 完整配置文件</h4>
<pre><code class="language-conf">#user nobody;
<pre><code class="language-yaml">#user nobody;
worker_processes 1;
#error_log logs/error.log;
@ -335,7 +367,7 @@ sudo apt-get update && sudo apt-get install yarn
<ul>
<li>配置 nginx (编译 /etc/nginx/sites-available/default)</li>
</ul>
<pre><code class="language-conf">server {
<pre><code class="language-yaml">server {
listen 80 default_server;
listen [::]:80 default_server;
@ -535,7 +567,7 @@ ls b.txt >& output.txt #两个表达式效果一样的
<li>证书生成好并放置到 nginx 上。(证书生成方法不做介绍请自行百度)</li>
<li>http 跳转 https 配置</li>
</ol>
<pre><code class="language-conf">server {
<pre><code class="language-yaml">server {
if ($scheme = http) {
rewrite ^(.*)$ https://$host$1 permanent;
}
@ -544,7 +576,7 @@ ls b.txt >& output.txt #两个表达式效果一样的
<ol start="4">
<li>web 端口监听配置</li>
</ol>
<pre><code class="language-conf">#极空间-web
<pre><code class="language-yaml">#极空间-web
server {
listen 10000 ssl http2; #ipv4
listen [::]:10000 ssl http2; #ipv6
@ -637,7 +669,7 @@ server {
<li>路径映射(由于青龙面板有 nodejs 环境,所以我把 hexo 博客的编译也放置在上面,再把 nginx 的 html 映射过来,这样就可以直接编译发布了。)<br />
<img data-src="https://file.jingxiyuan.cn/images/2022/10/24/2022-10-24-19-29-06.jpg" alt="" /></li>
</ul>
<pre><code class="language-conf">#青龙面板装载路径
<pre><code class="language-yaml">#青龙面板装载路径
/ql/data
#博客装载路径如果你不部署hexo博客可以不用配置
/root/.ssh  #ssh证书文件如果你不用把hexo推送到git上可以不用配置
@ -664,13 +696,13 @@ server {
<code>0 */3 * * *</code></li>
<li>环境变量</li>
</ul>
<pre><code class="language-conf">名称JD_COOKIE
<pre><code class="language-yaml">名称JD_COOKIE
web京东登陆后按F12在网络tab页中的请求内查找cookie然后复制pt_key=到pt_pin=等
</code></pre>
<ul>
<li>配置文件 (主要修改和添加以下配置)</li>
</ul>
<pre><code class="language-conf">repo命令拉取脚本时需要拉取的文件后缀直接写文件后缀名即可
<pre><code class="language-yaml">repo命令拉取脚本时需要拉取的文件后缀直接写文件后缀名即可
RepoFileExtensions="js py ts"
钉钉(消息推送)
export DD_BOT_TOKEN=
@ -702,7 +734,7 @@ export JD_PAY_CONTRACT=true
<ul>
<li>依赖管理</li>
</ul>
<pre><code class="language-conf">#nodejs依赖
<pre><code class="language-yaml">#nodejs依赖
crypto-js
prettytable
dotenv
@ -795,7 +827,7 @@ curl -sS https://bootstrap.pypa.io/get-pip.py | python3
<img data-src="https://file.jingxiyuan.cn/images/2022/10/21/2022-10-21-11-54-32204f14d87e95b59e.jpg" alt="" /></li>
</ol>
<h4 id="修改themeshoka配置"><a class="anchor" href="#修改themeshoka配置">#</a> 修改 Theme.Shoka 配置</h4>
<pre><code class="language-yml">valine:
<pre><code class="language-yaml">valine:
 appId: 粘贴5中获取的App ID #Your_appId
appKey: 粘贴5中获取的App Key #Your_appkey
placeholder: ヽ(○´∀`)ノ♪欢迎畅所欲言 # Comment box placeholder
@ -859,7 +891,7 @@ curl -sS https://bootstrap.pypa.io/get-pip.py | python3
<ul>
<li>此处配置为 nginx 反向代理,配置完成后可在外网连接访问</li>
</ul>
<pre><code class="language-conf">stream {
<pre><code class="language-yaml">stream {
#极空间-docker-mariadb
upstream mariadb {
@ -1219,7 +1251,7 @@ sudo systemctl status ndo2db.service
<ol>
<li>基础配置</li>
</ol>
<pre><code class="language-conf">port 6379
<pre><code class="language-yaml">port 6379
requirepass 123456密码建议不设置
vm-enabled no (虚拟内存,内存够的情况下可以不使用)
maxmemory 1GB告诉Redis当使用了多少物理内存后就开始拒绝后续的写入
@ -1247,7 +1279,7 @@ echo never > /sys/kernel/mm/transparent_hugepage/enabled
<ol start="4">
<li>客户端缓冲区限制</li>
</ol>
<pre><code class="language-conf">客户端的输出缓冲区的限制,因为某种原因客户端从服务器读取数据的速度不够快,可用于强制断开连接(一个常见的原因是一个发布 / 订阅客户端消费消息的速度无法赶上生产它们的速度)。
<pre><code class="language-yaml">客户端的输出缓冲区的限制,因为某种原因客户端从服务器读取数据的速度不够快,可用于强制断开连接(一个常见的原因是一个发布 / 订阅客户端消费消息的速度无法赶上生产它们的速度)。
可以三种不同客户端的方式进行设置:
normal -> 正常客户端
slave -> slave 和 MONITOR 客户端
@ -1265,7 +1297,7 @@ client-output-buffer-limit pubsub 32mb 8mb 60
<ol start="5">
<li>持久化配置</li>
</ol>
<pre><code class="language-conf">---关闭RDB持久化---
<pre><code class="language-yaml">---关闭RDB持久化---
save ""
默认配置如下:
save 900 1 #900秒内有1次更新就持久化
@ -1290,7 +1322,7 @@ min-slaves-to-write 3
min-slaves-max-lag 10 设置当一个master端的可用slave少于N个延迟时间大于M秒时不接收写操作。
</code></pre>
<h4 id="从服务"><a class="anchor" href="#从服务">#</a> 从服务</h4>
<pre><code class="language-conf">基本配置同主服务一致
<pre><code class="language-yaml">基本配置同主服务一致
slaveof 127.0.0.1 6379主redis的ip和端口
masterauth 123456 (主redis的密码)
可以通过slaveof no one命令将Slaver升级为Maste
@ -1331,7 +1363,7 @@ sudo sysctl vm.overcommit_memory=1
<link rel="alternate" href="https://blog.jingxiyuan.cn/2022/10/14/nginx%E5%85%81%E8%AE%B8%E8%B7%A8%E5%9F%9F%E8%8E%B7%E5%8F%96cookies%E6%96%B9%E6%B3%95/"/>
<content type="html">&lt;h4 id=&#34;使用场景&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#使用场景&#34;&gt;#&lt;/a&gt; 使用场景&lt;/h4&gt;
&lt;p&gt;  在 A 域名的页面向 B 域名提交数据时需要代入 B 域名的 cookie否则 B 域名会跳转到登陆页面。解决方式需要使用到 nginx 反向代理,配置如下:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-conf&#34;&gt;server &amp;#123;
&lt;pre&gt;&lt;code class=&#34;language-yaml&#34;&gt;server &amp;#123;
listen port ssl http2;
server_name xxx.com;
ssl_certificate_key /xxx.key;
@ -1469,7 +1501,7 @@ X-Frame-Options 三个参数:&lt;/p&gt;
&lt;li&gt;轮询(默认)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;em&gt;每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-conf&#34;&gt;upstream my_server &amp;#123;
&lt;pre&gt;&lt;code class=&#34;language-yaml&#34;&gt;upstream my_server &amp;#123;
server 192.168.0.2:8080;
server 192.168.0.3:8080;
&amp;#125;
@ -1489,7 +1521,7 @@ server &amp;#123;
&lt;li&gt;weight 权重策略&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;em&gt;weight 代表权重,默认为 1权重越高被分配的客户端越多指定轮询几率。weight 和访问比率成正比,用于后端服务器性能不均的情况。&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-conf&#34;&gt;upstream my_server &amp;#123;
&lt;pre&gt;&lt;code class=&#34;language-yaml&#34;&gt;upstream my_server &amp;#123;
server 192.168.0.2:8080 weight=1;
server 192.168.0.3:8080 weight=2;
&amp;#125;
@ -1509,7 +1541,7 @@ server &amp;#123;
&lt;li&gt;ip_hash&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;em&gt;每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-conf&#34;&gt;upstream my_server &amp;#123;
&lt;pre&gt;&lt;code class=&#34;language-yaml&#34;&gt;upstream my_server &amp;#123;
ip_hash;
server 192.168.0.2:8080;
server 192.168.0.3:8080;
@ -1530,7 +1562,7 @@ server &amp;#123;
&lt;li&gt;fair (第三方)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;em&gt;按后端服务器的响应时间来分配请求,响应时间短的优先分配。&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-conf&#34;&gt;upstream my_server &amp;#123;
&lt;pre&gt;&lt;code class=&#34;language-yaml&#34;&gt;upstream my_server &amp;#123;
server 192.168.0.2:8080;
server 192.168.0.3:8080;
fair;