Skip to content

Commit

Permalink
nginx && sentry proxy
Browse files Browse the repository at this point in the history
  • Loading branch information
J1angyue committed Feb 2, 2024
1 parent 2db23bc commit 2e2125d
Show file tree
Hide file tree
Showing 5 changed files with 183 additions and 53 deletions.
89 changes: 89 additions & 0 deletions docs/nginx/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# NGINX

## 在既有 nginx 上增加编译 http2 模块

参考自:[既有 Nginx 不停服重新动态编译增加 http2.0 模块](https://www.cnblogs.com/surging-dandelion/p/14378073.html)

```sh
nginx -V
```

复制 `configure arguments`,增加 `--with-http_v2_module`

```sh
./configure --prefix=/usr/local/nginx-1.24.0 --user=root --with-http_ssl_module --with-http_stub_status_module --with-http_v2_module
```

只 make 不 install

```sh
make
```

make 过后在编译目录 下 objs 中生成新的 nginx 执行文件

备份 ./sbin 下的 nginx

```sh
mv sbin/nginx sbin/nginx-without-h2.bak
```

将新编译的 nginx 执行文件拷贝到原执行文件的位置

```sh
cp objs/nginx sbin/nginx
```

查看现有 nginx 快捷运行命令

```sh
whereis nginx
```

备份现有 nginx 快捷运行命令

```sh
mv /usr/local/bin/nginx /usr/local/bin/nginx-without-h2.bak
```

拷贝 nginx 运行命令,快捷运行

```sh
cp sbin/nginx /usr/local/bin/
```

编辑 nginx.conf

```sh
listen 443 ssl http2;
```

重启 nginx

```sh
nginx -t
# 必须 stop、不能 reload
nginx -s stop
nginx
```

## 强制协商缓存 index.html

```nginx.conf
location / {
root D:/Softs/nginx-1.23.4/html/dist;
try_files $uri $uri/ /index.html;
index index.html;
# ++++++++
if ($request_filename ~* .*index\.(html)$){
add_header Cache-Control "no-cache";
}
}
```

## root 与 alias 的区别

## proxy_pass 后有无 `"/"` 的区别

## 开启同源策略
5 changes: 5 additions & 0 deletions docs/packet-capture/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# 抓包

## Fiddler

## Wireshark
142 changes: 89 additions & 53 deletions docs/sentry/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,8 @@ docker compose down
点击左上角`Sentry`文字,再点击下拉菜单中的`User settings`

- 将 `Language`设置为`Simplified Chinese`
- 将 `Timezone`设置为`Shanghai`
- 将 `Timezone`设置为`Shanghai`([修复无法更改时区的问题](https://github.com/getsentry/self-hosted/issues/2405)
- 刷新浏览器后界面就变成了中文

![调整界面语言与时区](./assets/2023-09-11_143646.jpg)
Expand Down Expand Up @@ -267,52 +268,52 @@ export default {
集成 `release` 需要配置两个地方: `sentryVitePlugin``Sentry.init`
假设版本号是通过[命令行注入的环境变量](/vite-vue/README.md#注入自定义环境变量),假设注入的版本号环境变量名是 `__RELEASE_4_SENTRY__`
假设版本号是通过[命令行注入的环境变量](../vite-vue/README.md#注入自定义环境变量),假设注入的版本号环境变量名是 `__RELEASE_4_SENTRY__`
```sh
npx cross-env __RELEASE_4_SENTRY__=${releaseNo} __IS_CREATE_SOURCE_MAP__=1 vite build
```
1. 配置 `sentryVitePlugin`
```js
// vite.config.js
import { sentryVitePlugin } from "@sentry/vite-plugin";
// 读取环境变量
const RELEASE_NAME = process.env.__RELEASE_4_SENTRY__
const IS_IS_CREATE_SOURCE_MAP = !!process.env.__CREATE_SOURCE_MAP__
export default {
// 省略其他配置
...,
sourcemap: IS_CREATE_SOURCE_MAP,
// 定义 release 版本号全局常量,应用代码中 Sentry.init() 时使用
define: {
__RELEASE_4_SENTRY__: JSON.stringify(RELEASE_NAME)
},
plugins: [
// 省略其他插件
...,
sentryVitePlugin({
// 新增 release 配置项
release: {
// vite 插件内的 release.name 要与 Sentry.init 时的 release 保持相同
name: RELEASE_NAME
},
// 可以配置也可以不配置,通常情况下是不生成 sourcemap 就不用上传
disabled: !IS_CREATE_SOURCE_MAP
// 以下配置与集成 release 无关无需改动
authToken: "...",
org: "...",
project: "...",
url: "...",
}),
],
};
```
2. 配置 `Sentry.init`
### 1. 配置 `sentryVitePlugin`
```js
// vite.config.js
import { sentryVitePlugin } from "@sentry/vite-plugin";
// 读取环境变量
const RELEASE_NAME = process.env.__RELEASE_4_SENTRY__
const IS_IS_CREATE_SOURCE_MAP = !!process.env.__CREATE_SOURCE_MAP__
export default {
// 省略其他配置
...,
sourcemap: IS_CREATE_SOURCE_MAP,
// 定义 release 版本号全局常量,应用代码中 Sentry.init() 时使用
define: {
__RELEASE_4_SENTRY__: JSON.stringify(RELEASE_NAME)
},
plugins: [
// 省略其他插件
...,
sentryVitePlugin({
// 新增 release 配置项
release: {
// vite 插件内的 release.name 要与 Sentry.init 时的 release 保持相同
name: RELEASE_NAME
},
// 可以配置也可以不配置,通常情况下是不生成 sourcemap 就不用上传
disabled: !IS_CREATE_SOURCE_MAP
// 以下配置与集成 release 无关无需改动
authToken: "...",
org: "...",
project: "...",
url: "...",
}),
],
};
```
### 2. 配置 `Sentry.init`
```js
import { init, BrowserTracing } from "@sentry/vue";
Expand All @@ -332,7 +333,7 @@ function setupSentry(app, router) {
}
```
### 最终效果:
### 3. 查看最终效果
某次构建指定版本号为`11`、生成 `sourcemap`,使用构建命令:
Expand All @@ -342,11 +343,11 @@ npx cross-env __RELEASE_4_SENTRY__=11 __IS_CREATE_SOURCE_MAP__=1 vite build
查看错误详情、报错文件及行数:
![获取 authToken](./assets/2023-10-23_090122.jpg)
![查看错误详情、报错文件及行数](./assets/2023-10-23_090122.jpg)
查看 `sourcemap` 及对应的版本号:
![获取 authToken](./assets/2023-10-23_090319.jpg)
![查看错误详情、报错文件及行数](./assets/2023-10-23_090319.jpg)
## 集成 environment
Expand All @@ -362,11 +363,14 @@ npx cross-env __RELEASE_4_SENTRY__=11 __IS_CREATE_SOURCE_MAP__=1 vite build
3. `environment` 值可以完全自定义,不是必须为 `"production"`
### 1. 配置 `Sentry.init`
```js
import { init, BrowserTracing } from "@sentry/vue";
function setupSentry(app, router) {
init({
// 设置 `environment`
environment: import.meta.env.MODE,
app,
dsn: "填入 DSN",
Expand All @@ -379,18 +383,50 @@ function setupSentry(app, router) {
}
```
使用以下命令构建:
```sh
vite build
# OR
vite build --mode staging
```
### 2. 查看最终效果
搜索条件处点击 `All Envs`,下拉中可根据环境变量筛选
![查看最终效果](./assets/2023-10-23_094614.jpg)
## ZDB 使用中的客制化
客制化项目由 ZDB 的服务器情况决定:
### 1. 公网转发上报请求
`sentry`部署在一个内网服务器上,只能通过内部网络访问 sentry 服务器,外部互联网无法直接访问 sentry 服务器发送上报请求。
因此上报异常的请求先到达测试服务器上,由测试服务器上的`nginx`走内网转发代理到`sentry`服务器上。
目的是让上报异常的请求走测试服务器而不是生产服务器,节省服务器资源
![ZDB 服务器](./assets/zdb服务器.jpg)
要达成的效果:
无法更改时区
https://github.com/getsentry/self-hosted/issues/2405
![ZDB 服务器](./assets/zdb服务器.jpg)
如上图,ZDB 的`sentry`部署在一个内网服务器上,只能通过内部网络访问 `sentry` 服务器,外部互联网无法直接访问 sentry 服务器并发送上报请求。
因此生产环境上报异常的请求先到达`测试服务器`上,由`测试服务器`上的`nginx`走内网转发代理到`sentry`服务器上。
1.1 修改 DSN
sentry 提供的 DSN 通常为以下格式:
`https://${HASH}@${SENTRY_SERVER_IP}:${SENTRY_SERVER_PORT}/${PROJECT_ID}`
sentry 前端 sdk 依据 DSN 向 `https://${SENTRY_SERVER_IP}:${SENTRY_SERVER_PORT}` 发送请求,将 DSN 中的 `SENTRY_SERVER_IP``SENTRY_SERVER_PORT` 改为公网的 IP(域名) 和端口号,再由公网的 IP 背后的这台服务器将请求转发到 sentry 服务器即可
1.2 修改公网的 IP 服务器的 nginx 配置
```nginx.conf
# 将 /sentry 开头的请求转发到真实 sentry 服务上
location /sentry {
http://${SENTRY_SERVER_IP}:9000/;
}
```
1. 修改 URL-PREFIX
1.3 其他可用方案
管理 -》 settings 根 url :https://ZDB_DOMAIN:48180/sentry
即:修改 `根 URL`(Root Url)。修改了之后 sentry 本身的服务也出现了一些问题所以放弃了这个方案,改为修改 DSN
Binary file added docs/sentry/assets/2023-10-23_094614.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/sentry/assets/2023-12-13_184416.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 2e2125d

Please sign in to comment.