阿水的世界。

分类 网站相关 下的文章

01月 10

网页禁止选择文字的CSS代码

为了防止网页的文字被人选择、复制,可使用如下CSS代码样式,根据情况,对页面的内容进行选择控制。
具体代码有如下4个,都是关于user-select属性的。

 -webkit-user-select:text;
 -moz-user-select:text;
 -ms-user-select:text;
 user-select:text

当user-select的值列表及解释:

  • all 当所有内容作为一个整体时可以被选择。如果双击或者在上下文上点击子元素,那么被选择的部分将是以该子元素向上回溯的最高祖先元素
  • auto 文本将根据浏览器的默认属性进行选择
  • contain 选择该元素范围内的文本,只支持(Explorer未测试)
  • none 元素和子元素的文本将无法被选中
  • text 文本可以被选中 inherit 继承父元素的此属性
  • initial 设置为初始的样式属性
  • revert 样式表中定义的元素属性的默认值。若用户定义样式表中显式设置,则按用户定义的设置否则,按照浏览器默认的的样式设置在否则,等价于unset
  • unset 如果该属性可以被继承,则是继承的值,不可以被继承(initial),则是默认的值
06月 04

nextcloud更新插件导致服务器处于维护模式

确保服务器本身没出什么问题,可执行
sudo -u www php occ maintenance:mode --off关闭维护模式。
执行完成会显示Maintenance mode disabled.
正常情况下网盘应该可以正常访问了。

05月 07

数据库还原造成的孤立用户没有登陆名的修复办法

这几天给一个网站更换服务器,旧服务器是windows server2008,网站使用的是asp.net开发,使用的数据库是Mssql2008,因为winserver2008已经停止更新了,所以新的服务器安装的是Windows Server 2022 Datacenter系统,数据库安装的是Mssql2012。对应用和数据库进行迁移,数据库还原以后,访问网站时出现了问题,提示无法登陆。

经检查,因为我在旧的服务器上对数据库做的是备份操作,生成的文件在新的服务器上做的是还原数据库操作,这样回复数据库的结果是只将数据库本身还原了,但是系统数据库中没有这个数据库中的用户信息,造成了数据库中的用户成为了孤立用户,系统中没有该用户的登陆名,所以不具备登陆权限。

孤立帐户,就是某个数据库的帐户只有用户名而没有登录名,这样的用户在用户库的sysusers系统表中存在,而在master数据库的syslogins中却没有对应的记录。

查到原因后,自己进行了修复尝试,在mssql的“安全性”-“登陆名”下,增加一个和原数据库中的登陆名一致的用户,这个时候就出现了问题,显示已经存在该用户,无法新增,但是经过此操作后在“登陆名”项目下出现了准备新增的用户。经过尝试,仍然无法登陆,并且无法赋上对数据库的各项的权限。

经过搜索,找到了如下的修复方法:

首先将在需要修复的数据库中新建查询,执行下边命令即可:

  1. 列出当前数据库的孤立用户(这步不是必须)

    exec sp_change_users_login 'REPORT'

  2. 将孤立用户所对应的同名登录名添加到syslogins中

    exec sp_change_users_login 'AUTO_FIX','用户名'

  3. 也可以使用这个命令,将用户名映射为指定的登录名

    exec sp_change_users_login 'UPDATE_ONE','用户名','登录名'

这里边的用户名和登陆名应根据实际情况修改。

执行完后,数据库访问就正常了。

12月 24

重启xdrip+的配套相关服务Nightcout

Nightcout是一个用于血糖数据收集的在线数据库,可用于xdrip+的数据同步。
在linux系统下,搭建的Nightcout因为使用了SSL,且证书过期,导致数据无法同步,显示SSL过期,重发证书后,无法使用npm stop dev停止该项目。

因为Nightcout使用的nodejs编写,可以通过查询node关键词获取进程id,然后用kill杀死进程,再重新启动Nightcout服务即可。

具体可使用如下命令:

  1. 使用netstat -nap | grep node命令查询id号,同时结合服务监听的端口来确定准确的id号
  2. 使用kill -9 id号杀死当前进程
  3. 使用npm run devnpm run proc重新启动服务即可。
06月 25

更新Let's Encrypt SSL证书(通过DNS方式验证)

刚刚,网站的Let's Encrypt SSL到期了,需要更新一下证书,但是不想通过80端口自动更新,想使用DNS验证的方式手动更新,
现在服务器已经安装过certbot,使用这个命令certbot-auto --manual --preferred-challenges dns certonly更新证书。
如果遇到这个错误:

Upgrading certbot-auto X.XX to X.XX.X...

Couldn't download https://raw.githubusercontent.com/certbot/certbot/v0.XX.0/letsencrypt-auto-source/letsencrypt-auto. <urlopen error [Errno 110] Connection timed out>

原因是:certbot-auto将始终尝试从最新版本中获取自身的最新版本。

解决方案:在命令后加 --no-self-upgrade 即可。即:

certbot-auto --manual --preferred-challenges dns certonly --no-self-upgrade

运行后,根据提示输入单个或多个域名,多个域名中间用英文逗号隔开,再次显示:

Please deploy a DNS TXT record under the name
_acme-challenge.XXXX.com with the following value:

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Before continuing, verify the record is deployed.

这时需要更新域名的_acme-challenge解析值,解析完成后,使用nslookup命令可以查到相应的解析后,再点继续。
具体查询命令如下:

$ nslookup
> set type=txt
> _acme-challenge.XXXX.com
Server:    223.5.5.5
Address:    223.5.5.5#53

Non-authoritative answer:
_acme-challenge.XXXX.com    text = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

certbot提示证书更新成功后,重启网站服务即可。
lnmp重启nginx命令:sudo lnmp nginx restart

至此,SSL更新完成。