GZIDC 新一代数据中心,上面的云服务器怎么样啊

http://www.gzidc.com , 这个网站上的服务器和虚拟机怎么样啊,靠谱么

gzidc 服务器 中心 数据8 条回复 • 2017-11-20 15:14:45 +08:00
isCyan 1
isCyan 2017-11-20 11:28:25 +08:00 via Android
关于配合公安部“一键关停”应急演练行动通知
codeeer 2
codeeer 2017-11-20 11:29:34 +08:00 via iPhone
关于配合公安部“一键关停”应急演练行动通知
xidadada 3
xidadada 2017-11-20 13:13:43 +08:00
关于配合公安部“一键关停”应急演练行动通知
xidadada 4
xidadada 2017-11-20 13:13:59 +08:00
http://www.gzidc.com/FrontCms/getArticleShow/cat_id/33/art_id/997.html
stabc 5
stabc 2017-11-20 13:26:07 +08:00
>此次“一键关停”专项行动为公安机关的应急演练,被关停的网站将在关闭后 2 小时内恢复。

牛逼!!!!
SourceMan 6
SourceMan 2017-11-20 13:28:02 +08:00
看楼上,不靠谱,大家注意远离这个云服务商
(感觉楼主做了一波负面的 SEO,真是 666,还没法删帖)
est 7
est 2017-11-20 14:47:24 +08:00
关于配合公安部“一键关停”应急演练行动通知
SakuraKuma 8
SakuraKuma 2017-11-20 15:14:45 +08:00
那个,我想说,不是正常吗。
那天很多 IDC 都要啊。
https://www.google.com/search?q=%E4%B8%80%E9%94%AE%E5%85%B3%E5%81%9C&oq=%E4%B8%80%E9%94%AE%E5%85%B3%E5%81%9C&aqs=chrome..69i57.20508j0j7&sourceid=chrome&ie=UTF-8

服务器 512M 内存, npm 老是被 killed 该怎么办?

编译 node-sass,就连现在打个包都被 killed 了,怎么办好?

> ROCBOSS-UI@2.2.1 product /home/website/rocboss
> export NODE_ENV=production&&set NODE_ENV=production&&webpack –progress –colors

是否压缩文件:true
production
输出路径:web/dist/
production
78% additional chunk assetsKilled
我还专门把 mysql 关掉再编译的,还是通不过,怎么办? 这是服务器的内存情况。

production killed node_env rocboss10 条回复 • 2017-12-08 09:47:28 +08:00
yaopingan 1
yaopingan 2017-11-28 12:25:31 +08:00 via Android
用 cnpm 被 kill 的概率会小很多
Shura 2
Shura 2017-11-28 12:31:55 +08:00
openvz 架构就这样,可能母鸡内存满了。
zouxy 3
zouxy 2017-11-28 13:23:45 +08:00 via iPhone
加 swap
asen1987 4
asen1987 2017-11-28 13:24:23 +08:00
加钱
LeungJZ 5
LeungJZ 2017-11-28 14:44:38 +08:00
@asen1987 加不了内存。
@zouxy 怎么加 swap ?
@yaopingan cnpm 难道就不用编译的了么?而且国外的服务器用 cnpm 慢的要死。
yaoliyc 6
yaoliyc 2017-11-28 17:04:14 +08:00 via iPhone
@LeungJZ 如果硬盘有富余可以试着将硬盘空间加到交换区
LeungJZ 7
LeungJZ 2017-11-28 21:54:27 +08:00
@yaoliyc 这个不会啊,而且本来就有 64 的 swap,会冲突吗?
yaopingan 8
yaopingan 2017-11-29 07:34:35 +08:00 via Android
@LeungJZ cnpm 安装模块相对内存占用少点。你到服务器进行前端代码构建,这个不是很合理啊,为啥不在本地做完?
yaoliyc 9
yaoliyc 2017-11-29 07:51:09 +08:00 via iPhone
@LeungJZ 这个需要你自己百度了,我自己买的 vps 没梦操作成功。
iceheart 10
iceheart 2017-12-08 09:47:28 +08:00 via Android
google swapon swapoff

你怎么备份服务器文件的?

需求:
公司服务器每周定时备份,1G 左右,每周增量 80m 左右,希望可以有增量备份,不需要每次把已备份的文件重复备份。

我在考虑 坚果云 或者 七牛云 ,老司机快带我上车?
增量 服务器 坚果云 七牛云21 条回复 • 2017-12-16 00:40:20 +08:00
XiaoFaye 1
XiaoFaye 2017-12-02 10:05:00 +08:00 via Android
1g 左右全备份也没什么,不需要搞什么增量。我自己差不多 3g 数据,都是天天全备份。
naiba 2
naiba 2017-12-02 10:14:25 +08:00 via Android
@XiaoFaye 用的啥呀老铁
XiaoFaye 3
XiaoFaye 2017-12-02 10:17:51 +08:00 via Android
@naiba 自己写的 script 定时打包然后 lftp 上传到备份服务器。
gamexg 4
gamexg 2017-12-02 10:21:45 +08:00 via Android
私人用的 rsync + zfs 快照。
qqerqqer 5
qqerqqer 2017-12-02 10:49:26 +08:00 via iPad
duply 支持增量备份及加密
ivmm 6
ivmm 2017-12-02 11:02:08 +08:00
使用 AliCloud Duplicity 将服务器文件备份至 OSS,支持全量、增量、加密、定时备份

https://www.mf8.biz/alicloud-duplicity/
ddd2500 7
ddd2500 2017-12-02 12:38:53 +08:00
备份到 AWS, 全备份。
naiba 8
naiba 2017-12-02 13:00:36 +08:00 via Android
@gamexg 我也准备 rsync
@qqerqqer 没找到相关说明
@ivmm 不错不错,费用在多少
@ddd2500 aws 费用多少
ivmm 9
ivmm 2017-12-02 13:17:53 +08:00
@naiba oss 是按量的呀,其实光储存不走流量,开放性公共储存都很便宜的
chinni 10
chinni 2017-12-02 13:31:26 +08:00 via Android
用 borg 或者 hashbackup

11
yytsjq 2017-12-02 13:46:20 +08:00
如果是海外服务器,可以考虑备份到 Dropbox,自带历史版本。
naiba 12
naiba 2017-12-02 14:20:02 +08:00 via Android
@chinni 现在是考虑备份到哪更安全性价比更高
@yytsjq dropbox 价格感人
qqerqqer 13
qqerqqer 2017-12-02 17:35:04 +08:00
@naiba 教程在这里 https://www.thomas-krenn.com/en/wiki/Backup_on_Linux_with_duply#GPG_Key_Creation
jtsai 14
jtsai 2017-12-02 17:38:18 +08:00 via Android
crontab wget
xiaoz 15
xiaoz 2017-12-02 17:49:32 +08:00
数据不大,一般没必要增量。
1.备份到坚果云:写个脚本打包数据,然后 crontab 备份到坚果云。坚果云有提供 WEBDAV 功能,参考: https://www.xiaoz.me/archives/8429 使用 davfs2 挂载 webdav,不过免费版坚果云有流量限制吧。
2.如果是七牛云的话方案一样,用七牛提供的 shell 工具上传即可。
3.或者买个国外的虚拟主机( FTP 很大的那种),然后通过 FTP 备份。但是如果你服务器速度在国内估计有点慢。
dallaslu 16
dallaslu 2017-12-02 18:08:22 +08:00
Duplicity 备份到 Amazon S3
ionblue 17
ionblue 2017-12-02 18:15:24 +08:00 via Android
打包放到 online 的 c14 上,99.999999999%的可靠性,每 G 每月只要 0.005 欧元。
venhow 18
venhow 2017-12-02 19:46:26 +08:00 via Android
onedriver for business
chinni 19
chinni 2017-12-03 19:58:41 +08:00
@naiba hashbackup 支持多个 destination 包括不限于 backblaze b2,webdav,sftp。
特别推荐 b2
ponyxx 20
ponyxx 2017-12-15 23:52:05 +08:00 via Android
一般都是打包备份到腾讯云 cos 上边
naiba 21
naiba 2017-12-16 00:40:20 +08:00 via Android
@ponyxx 目前使用了 duplicity+oss

结帖了。

海外服务推荐 Online.net 的 C14 和#19 的 backblaze b2。

国内推荐使用 alicloud-duplicity 加密备份到 oss: https://www.lifelonglearning.cc

分享一个自用不错的服务器。

这家的机子现在不错。稳定性和速度都可以。已经用了将近 1 年。没出现啥问题。推荐给大家用:
https://www.diyvm.com/page.aspx?c=referral&u=62091

http://i.niupic.com/images/2017/11/28/mDYIev.png

我的站: https://www.lieqishi.com/ 大家可以测试测试
自用 机子 不错 服务器6 条回复 • 2018-07-24 21:37:15 +08:00
whx20202 1
whx20202 2017-11-28 14:48:41 +08:00
主要是小水管 不过大部分都是,香港这个情况就是这样
先关注一下好了
zlfzy 2
zlfzy 2017-11-28 14:51:34 +08:00
怎么感觉现在这些小厂远没有大厂实惠
Alwaysonline 3
Alwaysonline 2017-11-28 15:02:29 +08:00
小厂的蛮尴尬的,境外业务有更好的;境内涉及到域名备案肯定也会选大厂,下备案快,稳定性也好些。
qianbiTH 4
qianbiTH 2017-12-13 00:12:00 +08:00 via Android
嗯,福利美图。。。
jeffcott 5
jeffcott 2018-01-04 21:39:40 +08:00
你这个福利是自己爬的吗。。。
mostkia 6
mostkia 2018-07-24 21:37:15 +08:00
2m 小水管,而且费用也不便宜啊 50 元一个月,就是不知道延时怎么样。话说楼主你的网站禁止 ping 吗?我想看看延时都不行,包全都丢了。。我现在用的也是香港 VPS,ping 大部分时间都在 40MS (浙江电信)偶尔会到 100 多,但很快又会恢复正常,公司的网络是移动的,ping 就高一些( 60MS+偶尔会到 180+,很快又会恢复正常),因为 dns 绕道北京然后再到浙江的缘故。

请教一个 nginx 的端口转发问题

前言
本人是一个不懂后端的 iOS 开发,对 nginx 略知一二,知道它是做反向代理的,知道在哪改 nginx.conf,知道改完怎么 reload

问题描述
现有一太内网机器,领导帮我配置了一个可外网访问的域名,并用 nginx 配置了一个 ssl 证书,端口是 8088 ;

我用 docker 部署了一个服务,暴露的端口是 3000 。

现在希望能将 3000 端口映射到 8088 端口的一个路径下,比如 https://xxx.com:8088/yyy,从而实现外网能访问 3000 端口的目的。

网络上搜索了几个结果,但都没有效果,现在的配置:

location /yyy/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

proxy_pass http://0.0.0.0:3000/;
}
现在能实现的效果是能进首页,但是无法加载 css/js 等资源文件,提示 404,但是我不知道该怎么改了。

端口 Nginx proxy_set_header 太内网27 条回复 • 2021-08-03 13:14:38 +08:00
XiaoxiaoPu 1
XiaoxiaoPu 1 天前
proxy_pass 这一行,去掉 “;” 前面的 “/”
AoEiuV020 2
AoEiuV020 1 天前
仅供参考,我自己配置过同样作用的,

location ^~/clash/ {
proxy_pass http://127.0.0.1:9090/;

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
dablwow 3
dablwow 1 天前
应该不是斜杠的问题,楼主发一下报错的 css/js 的请求路径吧,有可能是写死的,等于在读 8088 的资源(实际不存在)
weichengwu 4
weichengwu 1 天前
@XiaoxiaoPu #1 “/” 去掉之后首页都打不开
weichengwu 5
weichengwu 1 天前
@AoEiuV020 #2 也不行
weichengwu 6
weichengwu 1 天前
@dablwow #3 “GET /assets/application-1b7c2119d0cc0be69a0e6705ee19d5bf859cc64e949a0faf412286a8a53db169.js HTTP/1.1” 404 153 “https://xx x.com:8088/yyy/”
AoEiuV020 7
AoEiuV020 23 小时 56 分钟前
@weichengwu 基本上确定是 html 问题,你希望整个网站都在 /yyy/下,但 html 请求了*对路径的 js,要改成相对路径才行,
XiaoxiaoPu 8
XiaoxiaoPu 23 小时 31 分钟前
抱歉看错了,没注意到 location 里有 /yyy/

错误原因应该是如 AoEiuV020 所说。
defunct9 9
defunct9 23 小时 29 分钟前
开 ssh,让我上去看看
weichengwu 10
weichengwu 23 小时 24 分钟前
@AoEiuV020 #7 感谢,那我估计要改一下服务的源码了

weichengwu 11
weichengwu 23 小时 23 分钟前
@defunct9 #9 这个不太方便? 整个设备是在内网的,公网访问是领导帮我配置的,这一块我也不会弄
AllenHua 12
AllenHua 22 小时 24 分钟前
404 就是没有读取到 css/js 资源

建议把所有资源都通过 lcation / 匹配 反代

然后 server 块定义一个 root dir

另外既然有域名了,可以再配置一个子域名,使用 https://abc.example.com 访问服务,这样 url 不更优雅么
ryd994 13
ryd994 22 小时 20 分钟前 via Android
你再看看前端请求的资源文件是在根路径下还是在 /sss/下?
你可能需要 proxy_redirect 和 subs_filter 。
但是更正确的做法是修改后端,让后端正确配置到 /sss/
yufeng0681 14
yufeng0681 22 小时 11 分钟前
建议用不同的二级域名实现
aaa.xxx.com >> A 网站
bbb.xxx.com >> local:3000
fdppzrl 15
fdppzrl 22 小时 2 分钟前 via Android
改改静态资源的访问路径或者 14 楼的方法
bipy 16
bipy 21 小时 14 分钟前
盲猜一个常见坑,加一条配置试试

absolute_redirect off;
ik 17
ik 20 小时 28 分钟前 via iPhone
0.0.0.0:3000

不知道你是不是故意改了的

应该是 127.0.0.1:3000
kkidou 18
kkidou 20 小时 24 分钟前
静态资源加载的问题, 楼上也都说了,可以看下把所需要的静态资源一并放到一个目录下
v2clay 19
v2clay 17 小时 42 分钟前
我也遇到过这个问题,其实就是 静态文件路径问题。因为多了一个 yyy 。
你需要通匹配,把 js css 文件 匹配到 一个目录下 如 /opt/yyy, 然后把 web 资源下所有的文件 copy 过去就行了(其实只会匹配 js css 文件,全 copy,主要是因为懒)。
v2clay 20
v2clay 17 小时 32 分钟前
@AoEiuV020 # 跟相对*对没关系,看描述本来就是相对路径。

主要问题是 请求的 uri 里多了一个 yyy 。如果是相对路径,匹配的是 /yyy/xx.js ,肯定找不到。
如果是*对路径,ip:8088/xx.js 匹配到 location / 下,肯定也找不到。
cpstar 21
cpstar 17 小时 27 分钟前
相对路径、*对路径
看到问题,猜了大概,看到 6#确定了猜测。
但是解决这个问题,很大情况下源头不太好修改——因为如果他容易修改的话,他就不会用*对路径这个 SB 的策略了——于是解决办法很有可能需要挨个 URL 做反代。

然后不知道 proxy_reverse

另外,location *好用 2#的匹配,当然写你那样也没啥问题。然后结尾斜杠的问题,保持统一,要有都有,要没有都没有,/xxx 和 /xxx/是两个 URL 。
tqyq88 22
tqyq88 17 小时 25 分钟前
不用改路径,加一行 rewrite /yyy/(.*) /$1 break;
weichengwu 23
weichengwu 17 小时 14 分钟前
感谢楼上各位的回复,今天下午一直在开会,明天去公司一一尝试。
weichengwu 24
weichengwu 17 小时 13 分钟前
感觉主要还是不懂 nginx 的工作方式,但是仅仅为了配置一个服务把 nginx 整个过一遍太吃精力了 ?
awker 25
awker 17 小时 1 分钟前
可以参考:Nginx proxy_pass 后出现部分请求 404 的解决办法 https://www.jianshu.com/p/55bfbba45fed
AoEiuV020 26
AoEiuV020 6 小时 37 分钟前
@v2clay 你这是在讲什么,#6 楼日志看了没有,问题就是 uri 里没有 yyy,到你这里还 uri 里多了一个 yyy,
要匹配的就是 /yyy/xx.js 才能被匹配反代到内网 /xx.js ,
Chieh 27
Chieh 2 小时 36 分钟前
$http_host 试试 https://xxx.com:8088/

PostgreSQL 有什么好用的客户端连接工具吗?

pgAdmin 感觉用不习惯,总感觉卡卡的。

Navicat 对 PostgreSQL 的字段类型显示不友好,smallint 类型显示成了 int2,bigint 显示成了 int8.
postgresql bigint smallint Navicat27 条回复 • 2021-08-03 14:52:32 +08:00
ThanksSirAlex 1
ThanksSirAlex 23 小时 35 分钟前 ❤️ 1
table plus,通吃所有数据库
aliceclark 2
aliceclark 23 小时 27 分钟前 ❤️ 4
Jetbrains 的 DataGrip 还不错
whoosy 3
whoosy 23 小时 25 分钟前
postico 只针对 pg 做的客户端
grissom 4
grissom 23 小时 23 分钟前
DBeaver
polyang 5
polyang 23 小时 19 分钟前
@whoosy 我是 Windows 系统
intmax2147483647 6
intmax2147483647 23 小时 10 分钟前 ❤️ 1
Navicate 没人提么
HashV2 7
HashV2 23 小时 7 分钟前
DataGrip + 1
monetto 8
monetto 22 小时 51 分钟前
HeidiSQL 吧。MySQL 的社区版 MariaDB 官方推荐的 GUI 工具。也可以连接 PostgreSQL 。
只有 Win 版本的,Mac 的 Wine64 可以直接免配置运行。
Mac 也可以用 DBevear
monetto 9
monetto 22 小时 50 分钟前
顺便,HeidiSQL 是我见过的,界面和 Navicat *像的工具了…
wmgx 10
wmgx 22 小时 47 分钟前
DataGrip+1

RicardoY 11
RicardoY 22 小时 34 分钟前 via iPhone
dbeaver
gzlock 12
gzlock 22 小时 23 分钟前 via Android
没有管理 Redis 需求的话首选 datagrip
dbeaver 支持的范围很广,但是 db 界面的操作响应不跟手( macos 和 win 都在用,都不跟手)
AngryPanda 13
AngryPanda 22 小时 23 分钟前
Navicat
shyrock 14
shyrock 22 小时 20 分钟前
再用 dbeaver,感觉不错。
yanzhiling2001 15
yanzhiling2001 22 小时 7 分钟前
袋鼠工具,国产货
https://gitee.com/dbkangaroo/kangaroo
pabupa 16
pabupa 22 小时 0 分钟前 ❤️ 1
https://github.com/beekeeper-studio/beekeeper-studio
leafre 17
leafre 21 小时 25 分钟前
收费 Navicat 免费 HeidiSQL
Maxwe11 18
Maxwe11 15 小时 2 分钟前
oracle 其实有个免费开源的 sql developer,装个驱动就能用,其实还挺好用的,跨平台,似乎用的人很少;
MarkLeeyun 19
MarkLeeyun 6 小时 46 分钟前
datagrip.
RRRoger 20
RRRoger 6 小时 8 分钟前
付费的还有一个 DbVisualizer
tobepro 21
tobepro 5 小时 33 分钟前
都不审题啊,楼主都说 Navicat 不行了,还推荐。个人用 Idea 的数据库管理就够了,和 Datagrip 一样,还不需要再打开一个 IDE,省内存
bairdshi 22
bairdshi 5 小时 6 分钟前
竟然没一个人用 pgadmin… 我落伍了吗
bairdshi 23
bairdshi 5 小时 6 分钟前
@bairdshi 对不起 看少了
polyang 24
polyang 4 小时 56 分钟前
@tobepro 哈哈,终于有个明白的人了。。。其实如果是 MySQL,用 Navicat 还是非常好的。
CoderLife 25
CoderLife 1 小时 50 分钟前
postico 吧
dbeaver, datagrid 都太重了
polyang 26
polyang 1 小时 41 分钟前
@CoderLife 这个貌似只有 mac 版本,我的是 Windows
NoUltimate 27
NoUltimate 57 分钟前
table plus,ui 比较好看,使用也方便,就是免费的好像会有限制

通过 ipsec/L2TP 加入到局域网的设备,是否能接收到 UDP 广播?

RT, 在公司通过 * 加入到家庭网络 在网络里不会自动发现群晖,同时通过 remote-play ( PlayStation 的远程客户端),也搜索不到本地设备。

所以猜测是通过 ipsec/L2TP 加入到局域网的设备,不能接收到 UDP 广播?

L2TP udp IPSEC 局域网15 条回复 • 2021-08-03 13:25:07 +08:00
bazingaterry 1
bazingaterry 1 天前 via iPhone
可能不在同一广播域?
kright 2
kright 1 天前
@bazingaterry 同 192.168.5.x 下
z1113456051 3
z1113456051 1 天前
可以吧,我局域网游戏改远程联机就是 L2TP 转发的 UDP 数据包。
zhangsanfeng2012 4
zhangsanfeng2012 23 小时 59 分钟前
这种发现报文应该都是组播报文吧
z1113456051 5
z1113456051 23 小时 58 分钟前
@z1113456051 不过我好像是指定 ip 的
ayasakinagi 6
ayasakinagi 23 小时 52 分钟前
L2TP 这种 * 应该不会转发 broadcast, 用 GRE 隧道吧
Linkinternet 7
Linkinternet 23 小时 23 分钟前
o*+vxlan 挺好。 直接二层隧道
kright 8
kright 23 小时 19 分钟前
@ayasakinagi
@Linkinternet 好家伙,我直接懵逼了
ayasakinagi 9
ayasakinagi 20 小时 44 分钟前
@Linkinternet 这两个一起上感觉性能感人 owo
ysc3839 10
ysc3839 19 小时 12 分钟前 via Android
有局域网相关的需求建议使用 Open* 的二层模式。

billlee 11
billlee 18 小时 4 分钟前
不能,windows 所谓的 L2TP/IPSec 实际上是 ppp over ethernet over l2tp over ipsec. ppp 自然是不支持广播的
phpfpm 12
phpfpm 15 小时 36 分钟前
我也问个问题,

l2tp/ipsec 如何不用自己的 dhcp,走宿主机的局域网的 dhcp 拿到上层的 ip 呢?
yyysuo 13
yyysuo 7 小时 1 分钟前
我也试过,不行的,就算是手动指定了 IP,也无法搜索到家里的设备。
Huelse 14
Huelse 4 小时 41 分钟前
可以尝试 wireguard,其本身就是基于 udp 的
julyclyde 15
julyclyde 2 小时 23 分钟前
@Huelse 基于 udp 和承载 udp 有什么关系?

Token 的自动续订,过期时间,常用设备登录的方案

*近在使用 Token 做登录身份. 自己尝试了一些方案, 但是感觉都不完美, baidu/google 也都没有找到好方案. 所以提出来, 请各位指点下.

token 自动续订
token 自动续订, 是为了保证用户在使用系统的过程中,自动刷新 accessToken,用户无感知,不会被要求强制登录.

前端被动刷新
请求响应 401 且 accesstoken 无效时,refreshToken retry.

为了防止并发, 前端需要双重判断加锁, 保证同时有多个请求时, 只会获得一个 AccessToken.

前端定时刷新
定时检查 token 有效期, 当 token 有效期低于阈值,且用户在*近一定时间内操作过页面, 就 refreshToken.

refreshToken 的临界点,可能会有并发的业务请求使用 旧的 accessToken, 导致请求失败. 所以在 refreshToken 时,不能立即删除旧的 accessToken,而是 10 秒后过期(删除).

后端刷新
后端使用 filter, 如果 accessToken 校验失败, 则使用 refreshToken 刷新 accessToken, 并 set-cookie.

refreshToken 的临界点,可能会有并发的业务请求. 如果 refreshToken 允许复用,会导致刷新出多个不同的 accessToken, 如果 refreshToken 不允许复用,会导致其他请求刷新 accessToken 失败.

为了解决这个问题, 需要在刷新 accessToken 时, 双重判断加锁. 保证同时有多个请求时, 只会生成一个 AccessToken.

该方案不符合 Oauth2 规范, refreshToken 应该是 client 行为.

RememberMe
由于用户需要在个人电脑与公共电脑上切换.为了保护账号安全,个人电脑上,希望有长期 Token, 公共电脑上,应该是短期 Token. 所以需要提供 RememberMe 特性. 我当前使用的方案如下:

如果用户登录时,没有勾选 RememberMe, 则依赖 RefreshToken 的有效性自动续订.
用户登录时,勾选了 RememberMe,则生成 RememberToken,有效期 14 天, 即使 RefreshToken 失效,也可以依靠 RememberToken 进行自动登录.
另外还有一种方案:

如果用户登录时,没有勾选 RememberMe, 则 clientId = web-common, accessToken 有效期 1 小时, RefreshToken 有效期 2 小时.
用户登录时,勾选了 RememberMe,则 clientId = web-remember, accessToken 有效期 24 小时, RefreshToken 有效期 14 天.
问题
有以下问题,各位有什么想法:

token 自动续订 和 RememberMe, 是否有其他方案?
token 的有效期多久合适? 我看到 github 的有效期是 14 天.
google/facebook/github 等公司是如何管理管理 token 的
token rememberme accesstoken refreshtoken8 条回复 • 2021-08-03 15:38:07 +08:00
xjoker 1
xjoker 4 小时 6 分钟前
等一个大佬来指导下 ?
*近做一个项目也遇到这种问题了
liuxianzhuo 2
liuxianzhuo 3 小时 51 分钟前
我是用的*种和第二种结合的方式
前端每次请求时在请求拦截器里判断当前 accesstoken 过期时间,当快过期或者已经过期时使用 refreshtoken 获取新的 accesstoken 并锁住新的并发请求,获取到 accesstoken 后解锁并使用新的 accesstoken 访问
darknoll 3
darknoll 2 小时 52 分钟前
@liuxianzhuo 前端如何判断当前 accesstoken 过期时间?
cp19890714 4
cp19890714 2 小时 25 分钟前
@darknoll 我当前使用的是 spring security oauth2. 生成 accessToken 时, 会有过期时间 Date, 以及有效时长 Long.
liuxianzhuo 5
liuxianzhuo 1 小时 36 分钟前
@darknoll 生成 accesstoken 时后端可以一并吧有效时长传到前端,后端没有传的话也可以手动 base64 解码 token,里面有个字段是过期时间
sparrww 6
sparrww 1 小时 12 分钟前
用户量不大不用纠结,直接每次请求服务端 token 续期就行,想怎么控制怎么控制,量大了加配置,何必自己找麻烦。
777777 7
777777 21 分钟前
用户每请求一次接口,后端就把 token 过期时间重置为 7 天,当用户 7 天没有操作,token 过期,需要重新登录。
onhao 8
onhao 6 分钟前
if (isset($_GET[‘renewal’])) {
$code = $_POST[‘code’];
$uid = c2u($code);
if ($uid) {
$data[‘code’] = u2c($uid);
$data[‘status’] = 0;

}
}

SQL查询是从Select开始的吗?

SQL查询按此顺序进行

这就是我查找到的顺序!(SELECT并不是在*步执行,而是到第五步才执行)

(这里是一篇推特: https://twitter.com/b0rk/status/1179449535938076673)

(我真的很想找到一种比“sql查询按此顺序发生/运行”更准确的表达方式,但我还没想出来。)

%title插图%num

在非图形格式中,其顺序为:

  1. l FROM/JOIN 和所有的 ON 条件
  2. l WHERE
  3. l GROUP BY
  4. l HAVING
  5. l SELECT(包括窗口函数)
  6. l ORDER BY
  7. l LIMIT

%title插图%num

图解此图有助于你做出回答

此图是关于SQL查询的语义的 — 你可以通过它,对给定查询将返回什么结果进行推理,并回答如下问题:

  • 我能在一个GROUP BY的结果上执行WHERE么?(不行!WHERE发生在GROUP BY之前!)
  • 我可以根据窗口函数的结果进行过滤吗(不行!窗口函数发生在SELECT中,它发生在WHERE和GROUP BY之后)
  • 我可以基于GROUP BY中所做的来进行ORDER BY么?(可以!ORDER BY是*后执行的基本步骤,你可以根据任何东西做ORDER BY!)
  • LIMIT何时执行?(在*后!)

    %title插图%num

数据库引擎实际并不是按这个顺序运行查询

因为它实现了一系列优化以使查询运行得更快 — 我们稍后将在本文中讨论这一点。

所以:

  • 当你只想了解哪些查询是有效的,以及如何推理给定查询的结果时,可以使用此图。
  • 你不应该使用此图来解释查询性能或任何有关索引的事情,那是一个复杂得多的问题,涉及更多变量。

%title插图%num

混淆因素:列别名

有人在Twitter上指出,许多SQL实现允许你使用以下语法:

  1. SELECT CONCAT(first_name, ‘ ‘, last_name) AS full_name, count(*)
  2. FROM table
  3. GROUP BY full_name

此查询使其看起来像是在SELECT之后才发生GROUP BY,即使GROUP BY先执行,因为GROUP BY引用了SELECT中的别名。但是要使GROUP BY发挥作用,其实并不需要在SELECT之后才运行 — 数据库引擎只要将查询重写为:

  1. SELECT CONCAT(first_name, ‘ ‘, last_name) AS full_name, count(*)
  2. FROM table
  3. GROUP BY CONCAT(first_name, ‘ ‘, last_name)

并且首先运行GROUP BY。

你的数据库引擎肯定还会在开始运行查询之前执行一系列检查,确保你在SELECT和GROUP BY中放置的内容合在一起是有意义的,因此在开始制定执行计划之前,它必须将查询作为一个整体来查看。

%title插图%num

查询实际上不是按此顺序运行的(优化!)

实际上,数据库引擎并不是真的通过连接、然后过滤、然后再分组来运行查询,因为它们实现了一系列优化,只要重新排列执行顺序不改变查询结果,就可以重排以使查询运行得更快。

一个简单的例子说明了为什么需要以不同的顺序运行查询以使其快速运行,在这个查询中:

  1. SELECT * FROM
  2. owners LEFT JOIN cats ON owners.id = cats.owner
  3. WHERE cats.name = ‘mr darcy’

如果你只需要查找3个名为“mr darcy”的猫,那么执行整个左连接并匹配这两个表中的所有行是非常愚蠢的 —— 首先对名为“mr darcy”的猫进行一些筛选要快得多。在这种情况下,先进行过滤不会改变查询结果!

实际上,数据库引擎还实现了许多其它优化,这些优化可能会使它们以不同的顺序运行查询,但不能再说了,老实讲,这方面我不是专家。

%title插图%num

LINQ以FROM开始查询

LINQ(一种C#和VB.NET中的查询语法)使用的顺序为FROM … WHERE … SELECT。下面是一个LINQ查询的示例:

  1. var teenAgerStudent = from s in studentList
  2. where s.Age > 12 && s.Age < 20
  3. select s;

pandas(我所喜欢的数据治理工具:https://github.com/jvns/pandas-cookbook)也基本上是这样工作的,尽管你不需要使用这种精确的顺序 — 我经常会这样编写pandas代码:

  1. df = thing1.join(thing2) # like a JOIN
  2. df = df[df.created_at > 1000] # like a WHERE
  3. df = df.groupby(‘something’, num_yes = (‘yes’, ‘sum’)) # like a GROUP BY
  4. df = df[df.num_yes > 2] # like a HAVING, filtering on the result of a GROUP BY
  5. df = df[[‘num_yes’, ‘something1’, ‘something’]] # pick the columns I want to display, like a SELECT
  6. df.sort_values(‘sometthing’, ascending=True)[:30] # ORDER BY and LIMIT
  7. df[:30]

这并不是因为pandas对如何编写代码强加了任何特定规则。只是按照JOIN / WHERE / GROUP BY / HAVING的顺序编写代码通常好理解。(不过,我经常会先放一个WHERE来提高性能,而且我认为大多数数据库引擎实际也会先执行WHERE)

在R的dplyr中,你还能使用不同的语法来查询诸如Postgres、MySQL或SQLite等SQL数据库,它们的顺序也更符合逻辑。

不知道这一点令我自己着实惊讶

我写了这样一篇博文,因为当我发现这个顺序的时候非常惊讶,我以前从来没有看到过它被这样写下来 — 它基本上解释了我凭直觉所知道的,关于为什么一些查询被允许而另一些不被允许的一切。所以我想把它写下来,希望它能帮助其他人理解如何编写SQL查询。

原文:https://jvns.ca/blog/2019/10/03/sql-queries-don-t-start-with-select/