{ "version": "https://jsonfeed.org/version/1", "title": "Hito的公告栏", "subtitle": "天下事有难易乎?为之,则难者亦易矣", "icon": "https://blog.jingxiyuan.cn/images/favicon.ico", "description": "hito的博客", "home_page_url": "https://blog.jingxiyuan.cn", "items": [ { "id": "https://blog.jingxiyuan.cn/2022/10/20/%E6%9E%81%E7%A9%BA%E9%97%B4Docker%E7%89%88Wordpress%E5%AE%89%E8%A3%85%E4%B8%8E%E9%85%8D%E7%BD%AE/", "url": "https://blog.jingxiyuan.cn/2022/10/20/%E6%9E%81%E7%A9%BA%E9%97%B4Docker%E7%89%88Wordpress%E5%AE%89%E8%A3%85%E4%B8%8E%E9%85%8D%E7%BD%AE/", "title": "极空间Docker版Wordpress安装与配置", "date_published": "2022-10-20T00:56:00.000Z", "content_html": "
if((!empty( $_SERVER['HTTP_X_FORWARDED_HOST'])) || (!empty( $_SERVER['HTTP_X_FORWARDED_FOR'])) ) {\n $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];\n $_SERVER['HTTPS'] = 'on';\n}\n
\ndefine('WP_TEMP_DIR', ABSPATH.'wp-content/tmp');\ndefine('FS_METHOD', 'direct');\ndefine('FS_CHMOD_DIR', 0777);\ndefine('FS_CHMOD_FILE', 0777);\n
\nchown('/var/www/html', 'www-data');\nchgrp('/var/www/html', 'www-data');\nchmod('/var/www/html/wp-content/plugins', 0777);\nchmod('/var/www/html/wp-content/themes', 0777);\nchmod('/var/www/html/wp-content/tmp', 0777);\n
\nif($_GET['key'] != 'value') {\n\theader('Location: https://www.xxx.com/');\n}\n
\n",
"tags": [
"极空间",
"Docker",
"Wordpress",
"博客",
"极空间",
"Wordpress"
]
},
{
"id": "https://blog.jingxiyuan.cn/2022/10/19/%E9%95%BF%E4%BA%86%E4%B8%80%E5%B2%81/",
"url": "https://blog.jingxiyuan.cn/2022/10/19/%E9%95%BF%E4%BA%86%E4%B8%80%E5%B2%81/",
"title": "又长了一岁",
"date_published": "2022-10-19T00:51:00.000Z",
"content_html": "一年一次的总结时间又到了,这一年前半年平平无奇,后半年惊涛骇浪。中年危机如期而遇,人身的低谷终究还是来了。很沮丧也很无助,但还是要坚强面对。人生起起伏伏,时好时坏,终归还是会好起来的。加油!加油!加油
\n!
1、请先修改脚本中的服务端IP。\n2、如被监控端不支持let计算命令请执行sudo dpkg-reconfigure dash命令,弹出选择窗口后选择no。\n3、需要在脚本同目录下创建CentOS、Ubuntu、sh和conf目录,目录下分别放置nrpe的tar安装包、监控脚本和nrpe配置文件。\n\n#!/bin/bash\n#服务端ip\nSERVER_IP=10.10.10.121\n#安装目录\nINSTALL_HOME=`pwd`\n#安装ubuntu版本\nINSTALL_UBUNTU()\n{\n\tsudo apt-get update\n\tsudo apt-get install -y autoconf automake gcc libc6 libmcrypt-dev make libssl-dev wget openssl\n\t\n\tcd /tmp\n\t#wget --no-check-certificate -O nrpe.tar.gz https://github.com/NagiosEnterprises/nrpe/archive/nrpe-4.0.3.tar.gz\n\tcp $INSTALL_HOME/Ubuntu/nrpe.tar.gz ./\n\ttar xzf nrpe.tar.gz\n\n\tcd /tmp/nrpe-nrpe-4.0.3/\n\tsudo ./configure --enable-command-args --with-ssl-lib=/usr/lib/x86_64-linux-gnu/\n\tsudo make all\n\n\tsudo make install-groups-users\n\n\tsudo make install\n\n\tsudo make install-config\n\n\tsudo sh -c "echo >> /etc/services"\n\tsudo sh -c "sudo echo '# Nagios services' >> /etc/services"\n\tsudo sh -c "sudo echo 'nrpe 5666/tcp' >> /etc/services"\n\t\n\t#判断系统是高版本还是低版本\n\tVERSION=`lsb_release -r --short`\n\tIS_LOW_VERSION=`echo "$VERSION < 15" | bc`\n\n\tif [ $IS_LOW_VERSION = 1 ]; then\n\t\t#低版本\n\t\tsudo make install-init\n\telse\n\t\t#高版本\n\t\tsudo make install-init\n\t\tsudo systemctl enable nrpe.service\n\tfi\n\t\n\tsudo mkdir -p /etc/ufw/applications.d\n\tsudo sh -c "echo '[NRPE]' > /etc/ufw/applications.d/nagios"\n\tsudo sh -c "echo 'title=Nagios Remote Plugin Executor' >> /etc/ufw/applications.d/nagios"\n\tsudo sh -c "echo 'description=Allows remote execution of Nagios plugins' >> /etc/ufw/applications.d/nagios"\n\tsudo sh -c "echo 'ports=5666/tcp' >> /etc/ufw/applications.d/nagios"\n\tsudo ufw allow NRPE\n\tsudo ufw reload\n\t\n\tsudo sh -c "sed -i '/^allowed_hosts=/s/$/,$SERVER_IP/' /usr/local/nagios/etc/nrpe.cfg"\n\tsudo sh -c "sed -i 's/^dont_blame_nrpe=.*/dont_blame_nrpe=1/g' /usr/local/nagios/etc/nrpe.cfg"\n\t\n\tcd $INSTALL_HOME\n\tsudo cp ./sh/* /usr/local/nagios/libexec/\n\tsudo chmod +xr /usr/local/nagios/libexec/*\n\t\n\tsudo sh -c "echo 'command[check_ping]=/usr/local/nagios/libexec/check_ping -H 127.0.0.1 -w 3000.0,80% -c 5000.0,100% -p 5' >> /usr/local/nagios/etc/nrpe.cfg"\n\tsudo sh -c "echo 'command[check_cpu]=/usr/local/nagios/libexec/check_cpu.sh' >> /usr/local/nagios/etc/nrpe.cfg"\n\tsudo sh -c "echo 'command[check_mem]=/usr/local/nagios/libexec/check_mem.sh' >> /usr/local/nagios/etc/nrpe.cfg"\n\tsudo sh -c "echo 'command[check_disk]=/usr/local/nagios/libexec/check_disk.sh' >> /usr/local/nagios/etc/nrpe.cfg"\n\tsudo sh -c "echo 'command[check_my_service]=/usr/local/nagios/libexec/check_my_service.sh \\$ARG1\\$' >> /usr/local/nagios/etc/nrpe.cfg"\n\tsudo sh -c "echo 'command[check_system_info]=/usr/local/nagios/libexec/check_system_info.sh' >> /usr/local/nagios/etc/nrpe.cfg"\n\tNETWORK_INDEX=1\n\tfor NETWORK_NAME in `cat /proc/net/dev | awk '{i++; if(i>2){print $1}}' | sed 's/^[\\t]*//g' | sed 's/[:]*$//g'`;do\n\t\t\tif [ $NETWORK_NAME != 'lo' ]; then\n\t\t\t\t\tsudo sh -c "echo 'command[check_network$NETWORK_INDEX]=/usr/local/nagios/libexec/check_network.sh $NETWORK_NAME' >> /usr/local/nagios/etc/nrpe.cfg"\n\t\t\t\t\tNETWORK_INDEX=`expr $NETWORK_INDEX + 1 `\n\t\t\tfi\n\tdone\n\t\n\tif [ $IS_LOW_VERSION = 1 ]; then\n\t\t#低版本\n\t\tsudo start nrpe\n\telse\n\t\t#高版本\n\t\tsudo systemctl start nrpe.service\n\tfi\n}\n\n#安装centos版本\nINSTALL_CENTOS()\n{\n\tyum install -y gcc glibc glibc-common openssl openssl-devel perl wget\n\n\tcd /tmp\n\t#wget --no-check-certificate -O nrpe.tar.gz https://github.com/NagiosEnterprises/nrpe/archive/nrpe-4.0.3.tar.gz\n\tcp $INSTALL_HOME/CentOS/nrpe.tar.gz ./\n\ttar xzf nrpe.tar.gz\n\n\tcd /tmp/nrpe-nrpe-4.0.3/\n\t./configure --enable-command-args\n\tmake all\n\n\tmake install-groups-users\n\n\tmake install\n\n\tmake install-config\n\n\techo >> /etc/services\n\techo '# Nagios services' >> /etc/services\n\techo 'nrpe 5666/tcp' >> /etc/services\n\t\n\t#判断系统是高版本还是低版本\n\tVERSION=`rpm -q centos-release|cut -d- -f3`\n\t#安装bc命令\n\tyum -y install bc\n\tIS_LOW_VERSION=`echo "$VERSION < 7" | bc`\n\n\tif [ $IS_LOW_VERSION = 1 ]; then\n\t\t#低版本\n\t\tmake install-init\n\t\t\n\t\tiptables -I INPUT -p tcp --destination-port 5666 -j ACCEPT\n\t\tservice iptables save\n\t\tip6tables -I INPUT -p tcp --destination-port 5666 -j ACCEPT\n\t\tservice ip6tables save\n\telse\n\t\t#高版本\n\t\tmake install-init\n\t\tsystemctl enable nrpe.service\n\t\t\n\t\tfirewall-cmd --zone=public --add-port=5666/tcp\n\t\tfirewall-cmd --zone=public --add-port=5666/tcp --permanent\n\tfi\n\t\n\tsudo sh -c "sed -i '/^allowed_hosts=/s/$/,$SERVER_IP/' /usr/local/nagios/etc/nrpe.cfg"\n\tsudo sh -c "sed -i 's/^dont_blame_nrpe=.*/dont_blame_nrpe=1/g' /usr/local/nagios/etc/nrpe.cfg"\n\t\n\tcd $INSTALL_HOME\n\tsudo cp ./sh/* /usr/local/nagios/libexec/\n\tsudo chmod +xr /usr/local/nagios/libexec/*\n\t\n\tsudo sh -c "echo 'command[check_ping]=/usr/local/nagios/libexec/check_ping -H 127.0.0.1 -w 3000.0,80% -c 5000.0,100% -p 5' >> /usr/local/nagios/etc/nrpe.cfg"\n\tsudo sh -c "echo 'command[check_cpu]=/usr/local/nagios/libexec/check_cpu.sh' >> /usr/local/nagios/etc/nrpe.cfg"\n\tsudo sh -c "echo 'command[check_mem]=/usr/local/nagios/libexec/check_mem.sh' >> /usr/local/nagios/etc/nrpe.cfg"\n\tsudo sh -c "echo 'command[check_disk]=/usr/local/nagios/libexec/check_disk.sh' >> /usr/local/nagios/etc/nrpe.cfg"\n\tsudo sh -c "echo 'command[check_my_service]=/usr/local/nagios/libexec/check_my_service.sh \\$ARG1\\$' >> /usr/local/nagios/etc/nrpe.cfg"\n\tsudo sh -c "echo 'command[check_system_info]=/usr/local/nagios/libexec/check_system_info.sh' >> /usr/local/nagios/etc/nrpe.cfg"\n\tNETWORK_INDEX=1\n\tfor NETWORK_NAME in `cat /proc/net/dev | awk '{i++; if(i>2){print $1}}' | sed 's/^[\\t]*//g' | sed 's/[:]*$//g'`;do\n\t\t\tif [ $NETWORK_NAME != 'lo' ]; then\n\t\t\t\t\tsudo sh -c "echo 'command[check_network$NETWORK_INDEX]=/usr/local/nagios/libexec/check_network.sh $NETWORK_NAME' >> /usr/local/nagios/etc/nrpe.cfg"\n\t\t\t\t\tNETWORK_INDEX=`expr $NETWORK_INDEX + 1 `\n\t\t\tfi\n\tdone\n\t\n\tif [ $IS_LOW_VERSION = 1 ]; then\n\t\t#低版本\n\t\tif [ $(echo "$VERSION < 6" | bc) -eq 1 ]; then\n\t\t\tservice nrpe start\n\t\telse\n\t\t\tstart nrpe\n\t\tfi\n\telse\n\t\t#高版本\n\t\tsystemctl start nrpe.service\n\tfi\n}\n\n#安装其它版本\nINSTALL_OTHER()\n{\n\techo "Not supported at the moment."\n}\n\n#根据不同系统安装不同版本\nINSTALL()\n{\n\tif grep -Eqii "CentOS" /etc/issue || grep -Eq "CentOS" /etc/*-release; then\n\t\tDISTRO='CentOS'\n PM='yum'\n\t\tINSTALL_CENTOS\n elif grep -Eqi "Red Hat Enterprise Linux Server" /etc/issue || grep -Eq "Red Hat Enterprise Linux Server" /etc/*-release; then\n DISTRO='RHEL'\n PM='yum'\n\t\tINSTALL_OTHER\n elif grep -Eqi "Aliyun" /etc/issue || grep -Eq "Aliyun" /etc/*-release; then\n DISTRO='Aliyun'\n PM='yum'\n\t\tINSTALL_OTHER\n elif grep -Eqi "Fedora" /etc/issue || grep -Eq "Fedora" /etc/*-release; then\n DISTRO='Fedora'\n PM='yum'\n\t\tINSTALL_OTHER\n elif grep -Eqi "Debian" /etc/issue || grep -Eq "Debian" /etc/*-release; then\n DISTRO='Debian'\n PM='apt'\n\t\tINSTALL_OTHER\n elif grep -Eqi "Ubuntu" /etc/issue || grep -Eq "Ubuntu" /etc/*-release; then\n DISTRO='Ubuntu'\n PM='apt'\n\t\tINSTALL_UBUNTU\n elif grep -Eqi "Raspbian" /etc/issue || grep -Eq "Raspbian" /etc/*-release; then\n DISTRO='Raspbian'\n PM='apt'\n\t\tINSTALL_OTHER\n else\n echo "unknow linux."\n exit 1\n fi\n echo $DISTRO\n}\n\nINSTALL\n\nexit 0\n
\n#!/bin/bash\nsudo rm -f /usr/local/nagios/var/ndo2db.pid\nsudo rm -f /usr/local/nagios/var/ndo.sock\nsudo systemctl restart ndo2db.service\nsudo systemctl status ndo2db.service\n
\n",
"tags": [
"Linux",
"服务",
"经验分享",
"nagios",
"服务监控"
]
},
{
"id": "https://blog.jingxiyuan.cn/2022/10/17/redis%E4%B8%BB%E4%BB%8E%E5%9F%BA%E7%A1%80%E9%85%8D%E7%BD%AE%E8%AE%B0%E5%BD%95/",
"url": "https://blog.jingxiyuan.cn/2022/10/17/redis%E4%B8%BB%E4%BB%8E%E5%9F%BA%E7%A1%80%E9%85%8D%E7%BD%AE%E8%AE%B0%E5%BD%95/",
"title": "redis主从基础配置",
"date_published": "2022-10-17T06:07:00.000Z",
"content_html": "port 6379\nrequirepass 123456(密码,建议不设置)\nvm-enabled no (虚拟内存,内存够的情况下可以不使用)\nmaxmemory 1GB(告诉Redis当使用了多少物理内存后就开始拒绝后续的写入)\nbind 127.0.0.1 (注释掉,否则不能外部连接)\nrdbchecksum no(持久化数据检查)\nlist-max-ziplist-size 1024(ziplist的最大容量,正数为自己指定的大小。负数-1到-5为对应的值4到64Kb)\nlist-compress-depth 20(quicklist的两端多少个node不压缩,0为全部不压缩)\n
\nsysctl vm.overcommit_memory=1 (立即生效)\n修改/etc/sysctl.conf添加vm.overcommit_memory=1(表示内核允许分配所有的物理内存,而不管当前的内存状态如何。Redis的RDB持久化实现是folk一个子进程,然后让子进程将内存镜像dump到RDB文件中。理论上来说是需要跟父进程一样的内存空间,但是由于linux很早就支持的copy-on-write技术,所以实际上并不需要这么多的物理内存的。)\n
\n需要sudo su 切换到root身份(sudo 没用)\necho never > /sys/kernel/mm/transparent_hugepage/enabled\n修改/etc/init.d/redis-server,加入/bin/echo never > /sys/kernel/mm/transparent_hugepage/enabled\n
\nsysctl net.core.somaxconn=1024(立即生效)\n修改/etc/sysctl.conf添加net.core.somaxconn=1024\n
\n客户端的输出缓冲区的限制,因为某种原因客户端从服务器读取数据的速度不够快,可用于强制断开连接(一个常见的原因是一个发布 / 订阅客户端消费消息的速度无法赶上生产它们的速度)。\n可以三种不同客户端的方式进行设置:\nnormal -> 正常客户端\nslave -> slave 和 MONITOR 客户端\npubsub -> 至少订阅了一个 pubsub channel 或 pattern 的客户端\n语法 :\nclient-output-buffer-limit <class><hard limit> <soft limit> <soft seconds>\n一旦达到硬限制客户端会立即断开,或者达到软限制并保持达成的指定秒数(连续)。\n例如,如果硬限制为 32 兆字节和软限制为 16 兆字节 /10 秒,客户端将会立即断开。如果输出缓冲区的大小达到 32 兆字节,客户端达到 16 兆字节和连续超过了限制 10 秒,也将断开连接。默认 normal 客户端不做限制,因为他们在一个请求后未要求时(以推的方式)不接收数据,\n只有异步客户端可能会出现请求数据的速度比它可以读取的速度快的场景。\n把硬限制和软限制都设置为 0 来禁用该特性\nclient-output-buffer-limit normal 0 0 0\nclient-output-buffer-limit slave 5gb 512mb 60\nclient-output-buffer-limit pubsub 32mb 8mb 60\n
\n---关闭RDB持久化---\nsave ""\n默认配置如下:\nsave 900 1 #900秒内有1次更新就持久化\nsave 300 10 #300秒内有10次更新就持久化\nsave 60 10000 #60秒内有10000次更新就持久化\n---关闭RDB持久化---\n主从同步支持两种策略,即disk和socket方式。\n新的slave端和重连的salve端不允许去继续同步进程,这被称之为“完全同步”。\n一个RDB文件从master端传到slave端,分为两种情况:\n1、支持disk:master端将RDB file写到disk,稍后再传送到slave端;\n2、无磁盘diskless:master端直接将RDB file传到slave socket,不需要与disk进行交互。无磁盘diskless方式适合磁盘读写速度慢但网络带宽非常高的环境。\nrepl-diskless-sync no 默认不使用diskless同步方式\nrepl-diskless-sync-delay 30 无磁盘diskless方式在进行数据传递之前会有一个时间的延迟,以便slave端能够进行到待传送的目标队列中,这个时间默认是5秒\nrepl-ping-slave-period 60 slave端向server端发送pings的时间区间设置,默认为10秒\nrepl-timeout 3600 设置超时时间\nrepl-disable-tcp-nodelay no 是否启用TCP_NODELAY,如果启用则会使用少量的TCP包和带宽去进行数据传输到slave端,当然速度会比较慢;如果不启用则传输速度比较快,但是会占用比较多的带宽。\nrepl-backlog-size 1mb 设置backlog的大小,backlog是一个缓冲区,在slave端失连时存放要同步到slave的数据,因此当一个slave要重连时,经常是不需要完全同步的,执行局部同步就足够了。\nbacklog设置的越大,slave可以失连的时间就越长。\nrepl-backlog-ttl 3600 如果一段时间后没有slave连接到master,则backlog size的内存将会被释放。如果值为0则表示永远不释放这部份内存。\nslave-priority 100 slave端的优先级设置,值是一个整数,数字越小表示优先级越高。当master故障时将会按照优先级来选择slave端进行恢复,如果值设置为0,则表示该slave永远不会被选择。\nmin-slaves-to-write 3\nmin-slaves-max-lag 10 设置当一个master端的可用slave少于N个,延迟时间大于M秒时,不接收写操作。\n
\n基本配置同主服务一致\nslaveof 127.0.0.1 6379(主redis的ip和端口)\nmasterauth 123456 (主redis的密码)\n可以通过slaveof no one命令将Slaver升级为Maste\nbgsave (持久化命令,在redis-cli中执行,默认创建dump.rdb文件,路径为 /var/lib/redis/dump.rdb。可通过find / -name dump.rd查找)\n
\n看状态\nsudo /etc/init.d/redis-server status\n看端口\nnetstat -nlt|grep 6379\n外部连接\nsudo vim /etc/redis/redis.conf把protected-mode改为no,把bind ip注释掉\n重启\nsudo server redis-server restart\n查看内存\nfree -m\n批量删除指定key\nredis-cli -n 6 scan 0 match *2020-06-12 count 10000| xargs redis-cli -n 6 del\n大量删除key后快速释放被占用的内存\nmemory purge\n
\n写入问题\nredis-cli config set stop-writes-on-bgsave-error no\nsudo vim /etc/redis/redis.conf把stop-writes-on-bgsave-error改为no\n修改系统 sudo vim /etc/sysctl.conf加入vm.overcommit_memory=1\nsudo sysctl vm.overcommit_memory=1\n
\n",
"tags": [
"Linux",
"服务",
"经验分享",
"redis"
]
},
{
"id": "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/",
"url": "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/",
"title": "nginx允许跨域获取cookie的方法",
"date_published": "2022-10-14T09:13:00.000Z",
"content_html": "在 A 域名的页面向 B 域名提交数据时需要代入 B 域名的 cookie,否则 B 域名会跳转到登陆页面。解决方式需要使用到 nginx 反向代理,配置如下:
\nserver {\n\tlisten port ssl http2;\n\tserver_name xxx.com;\n\tssl_certificate_key /xxx.key;\n\tssl_certificate /xxx.pem;\n\tproxy_cookie_path ~(.*) "$1; SameSite=None; secure; httponly";\n\n\tlocation / {\n\t\t#允许镶套的方式(可以同域镶套、指定域名镶套或者所有域名镶套)\n\t\tadd_header X-Frame-Options ALLOWALL; #允许被所有域名镶套\n\t\tproxy_pass http://xxx;\n\t}\n}\n
\n",
"tags": [
"Linux",
"服务",
"经验分享",
"nginx",
"iframe",
"cookie"
]
},
{
"id": "https://blog.jingxiyuan.cn/2022/10/12/%E4%BD%BF%E7%94%A8picgo%E4%B8%8A%E4%BC%A0%E5%9B%BE%E7%89%87%E5%88%B0chevereto/",
"url": "https://blog.jingxiyuan.cn/2022/10/12/%E4%BD%BF%E7%94%A8picgo%E4%B8%8A%E4%BC%A0%E5%9B%BE%E7%89%87%E5%88%B0chevereto/",
"title": "使用PicGo上传图片到chevereto",
"date_published": "2022-10-12T06:40:00.000Z",
"content_html": "PicGo 是一款开源的图床管理工具,十分流行。
\nPicGo 官方指南:PicGo | PicGo
\n安装插件(需要先安装 NodeJS)
\n
图床配置
\nurl 后缀必须用红线圈中的部分,key 在 chevereto 登陆后 api 配置中查找
\n
首先安装好 svn 和 git 工具。
\n1、 到 svn 项目目录右键选中 gitbash 打开窗口,执行获取用户并映射成 git 样式账号命令如下:
\n svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > users.txt
然后会在目录下生成文件 users.txt 样式如:zhansan = 张三 zhansan@xxx.com。
\n2、新建个文件夹,将生成的 users.txt 放入新建的文件夹,然后在新建的文件夹中右键选中 gitbash 弹出窗口后执行下面命令(https://svn_project_url/ 为 svn 库的 url),拉取 svn 代码到本地新建文件夹中。
\n git svn clone https://svn_project_url/ --no-metadata --no-minimize-url --authors-file=users.txt
1、在 gitbash 窗口 cd 到 git 项目文件夹中执行以下命令把 git 仓库地址加入到 remote 中(https://git_project_url/ 为 git 库的 url)。
\n git remote add origin https://git_project_url/
2、push 项目到 git 库中。
\n git push origin master
X-Frame-Options HTTP 响应头是用来给浏览器指示允许一个页面可否在,或者 中展现的标记。网站可以使用此功能,来确保自己网站的内容没有被嵌套到别人的网站中去,也从而避免了点击劫持 (clickjacking) 的攻击。
\nX-Frame-Options 三个参数:
1、 DENY
\n表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。
\n2、SAMEORIGIN
\n表示该页面可以在相同域名页面的 frame 中展示。
\n3、ALLOW-FROM uri
\n表示该页面可以在指定来源的 frame 中展示。
\n4、ALLOWALL
\n表示该页面可以在任何来源的 frame 中展示。
\n换一句话说,如果设置为 DENY,不光在别人的网站 frame 嵌入时会无法加载,在同域名页面中同样会无法加载。另一方面,如果设置为 SAMEORIGIN,那么页面就可以在同域名页面的 frame 中嵌套。正常情况下我们通常使用 SAMEORIGIN 参数。
\n需要把下面这行添加到'site' 的配置中
\n Header always append X-Frame-Options SAMEORIGIN
需要添加到 ‘http’, ‘server’ 或者 ‘location’ 的配置项中,个人来讲喜欢配置在‘server’ 中
\n 正常情况下都是使用 SAMEORIGIN 参数,允许同域嵌套
\n add_header X-Frame-Options SAMEORIGIN;
允许单个域名 iframe 嵌套
\n add_header X-Frame-Options ALLOW-FROM http://xxx.com/;
允许多个域名 iframe 嵌套,注意这里是用逗号分隔
\n add_header X-Frame-Options "ALLOW-FROM http://xxx.com/,https://xxx.com/";
允许任何域名 iframe 嵌套
\n add_header X-Frame-Options ALLOWALL;
在‘conf/web.xml’填加以下配置
\n<filter> | |
<filter-name>httpHeaderSecurity</filter-name> | |
<filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class> | |
<init-param> | |
<param-name>antiClickJackingOption</param-name> | |
<param-value>SAMEORIGIN</param-value> | |
</init-param> | |
<async-supported>true</async-supported> | |
</filter> | |
<filter-mapping> | |
<filter-name>httpHeaderSecurity</filter-name> | |
<url-pattern>/*</url-pattern> | |
<dispatcher>REQUEST</dispatcher> | |
<dispatcher>FORWARD</dispatcher> | |
</filter-mapping> |
添加下面的配置到 ‘Web.config’文件中
\n<system.webServer> | |
<httpProtocol> | |
<customHeaders> | |
<add name=\"X-Frame-Options\" value=\"SAMEORIGIN\" /> | |
</customHeaders> | |
</httpProtocol> | |
</system.webServer> |
一个月都过去了,工作还没有着落!
\n", "tags": [ "生活", "心情", "郁闷", "心情" ] }, { "id": "https://blog.jingxiyuan.cn/2022/09/27/nginx%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E9%85%8D%E7%BD%AE/", "url": "https://blog.jingxiyuan.cn/2022/09/27/nginx%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E9%85%8D%E7%BD%AE/", "title": "nginx负载均衡配置", "date_published": "2022-09-27T06:45:00.000Z", "content_html": "每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
\nupstream my_server {\n\tserver 192.168.0.2:8080;\n\tserver 192.168.0.3:8080;\n}\n\nserver {\n\tlisten 80;\n\tserver_name 192.168.0.1;\n\n\t# Path to the root of your installation\n\tlocation / {\n\t\tproxy_pass http://my_server;\n\t}\n\t\n}\n
\nweight 代表权重,默认为 1,权重越高被分配的客户端越多,指定轮询几率。weight 和访问比率成正比,用于后端服务器性能不均的情况。
\nupstream my_server {\n\tserver 192.168.0.2:8080 weight=1;\n\tserver 192.168.0.3:8080 weight=2;\n}\n\nserver {\n\tlisten 80;\n\tserver_name 192.168.0.1;\n\n\t# Path to the root of your installation\n\tlocation / {\n\t\tproxy_pass http://my_server;\n\t}\n\t\n}\n
\n每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。
\nupstream my_server {\n\tip_hash;\n\tserver 192.168.0.2:8080;\n\tserver 192.168.0.3:8080;\n}\n\nserver {\n\tlisten 80;\n\tserver_name 192.168.0.1;\n\n\t# Path to the root of your installation\n\tlocation / {\n\t\tproxy_pass http://my_server;\n\t}\n\t\n}\n
\n按后端服务器的响应时间来分配请求,响应时间短的优先分配。
\nupstream my_server {\n\tserver 192.168.0.2:8080;\n\tserver 192.168.0.3:8080;\n\tfair;\n}\n\nserver {\n\tlisten 80;\n\tserver_name 192.168.0.1;\n\n\t# Path to the root of your installation\n\tlocation / {\n\t\tproxy_pass http://my_server;\n\t}\n\t\n}\n
\n把静态的资源,比如图片,css,js 等先加载到 Nginx 的服务器里。
\n", "tags": [ "Linux", "服务", "经验分享", "nginx", "负载均衡" ] }, { "id": "https://blog.jingxiyuan.cn/2022/09/26/%E8%A7%A3%E5%86%B3Hexo-Shoka%E8%83%8C%E6%99%AF%E9%9F%B3%E4%B9%90%E6%97%A0%E6%B3%95%E6%92%AD%E6%94%BE%E7%9A%84%E9%97%AE%E9%A2%98/", "url": "https://blog.jingxiyuan.cn/2022/09/26/%E8%A7%A3%E5%86%B3Hexo-Shoka%E8%83%8C%E6%99%AF%E9%9F%B3%E4%B9%90%E6%97%A0%E6%B3%95%E6%92%AD%E6%94%BE%E7%9A%84%E9%97%AE%E9%A2%98/", "title": "解决Hexo+Shoka背景音乐无法播放的问题", "date_published": "2022-09-26T11:30:00.000Z", "content_html": "今天突然发现博客的音乐无法播放了。经过一顿查找,发现是因为 https://api.i-meto.com/meting/api 调用出错了。shoka 主题应该是通过这个网站提取音乐地址、图片等信息。通过断点发现网易播放列表还是能正常获取的,只是列表中的具体音乐、图片无法获取了。于是自己用获取的列表信息组装出正确的 url 问题基本解决。只针对网易播放列表,图片只能使用一张固定的。
\n解决方法如下:
\n到 themes\\shoka\\source\\js_app 目录下打开 player.js 文件,在最底部 init (config) 下加入 vendorJs ('fancybox');,然后找到 56 行用下面的代码替换即可。
\nfetch: function(source) { | |
var list = [] | |
return new Promise(function(resolve, reject) { | |
source.forEach(function(raw) { | |
var meta = utils.parse(raw) | |
if(meta[0]) { | |
var skey = JSON.stringify(meta) | |
var playlist = store.get(skey) | |
if(playlist) { | |
\t\t\t // 自己修改 - start | |
\t\t\t var audioInfos = JSON.parse(playlist); | |
\t\t\t var neteaseStartUrl = \"https://music.163.com/song/media/outer/url?id=\"; | |
\t\t\t if (meta[0] == \"netease\" && audioInfos && audioInfos.length>0 && !audioInfos[0].url.startsWith(neteaseStartUrl)) {// 如果是网易音乐就自己构建 url | |
\t\t\t\t jQuery.ajax({ | |
\t\t\t\t\t url: audioInfos[0].url, | |
\t\t\t\t\t type: 'get', | |
\t\t\t\t\t async: false, | |
\t\t\t\t\t timeout: 5000, | |
\t\t\t\t\t complete : function(XMLHttpRequest, status){ | |
\t\t\t\t\t\t if (XMLHttpRequest.status != 200) { | |
\t\t\t\t\t\t\t audioInfos.forEach(function(audioInfo) { | |
\t\t\t\t\t\t\t\t var id = audioInfo.url.substring(audioInfo.url.indexOf(\"id=\")+3, audioInfo.url.indexOf(\"&auth=\")); | |
\t\t\t\t\t\t\t\t audioInfo.url = neteaseStartUrl + id; | |
\t\t\t\t\t\t\t\t audioInfo.pic = \"https://p3.music.126.net/Vji3PQJAZ2C7gS_6X51NFQ==/109951164723650033.jpg?param=200y200\"; | |
\t\t\t\t\t\t\t }) | |
\t\t\t\t\t\t } | |
\t\t\t\t\t\t list.push.apply(list, audioInfos); | |
\t\t\t\t\t\t resolve(list); | |
\t\t\t\t\t } | |
\t\t\t\t }); | |
\t\t\t } else { | |
\t\t\t\t list.push.apply(list, audioInfos); | |
\t\t\t\t resolve(list); | |
\t\t\t } | |
\t\t\t // 自己修改 - end | |
} else { | |
fetch('https://api.i-meto.com/meting/api?server='+meta[0]+'&type='+meta[1]+'&id='+meta[2]+'&r='+ Math.random()) | |
.then(function(response) { | |
return response.json() | |
}).then(function(json) { | |
store.set(skey, JSON.stringify(json)) | |
list.push.apply(list, json); | |
resolve(list); | |
}).catch(function(ex) {}) | |
} | |
} else { | |
list.push(raw); | |
resolve(list); | |
} | |
}) | |
}) | |
} |
今天突然发现自己的网站不能访问了。经过一顿排查,发现是家里的外网 ip 变动后 nginx 解析的域名 ip 还是旧 ip 导致的。手动重启 nginx 后恢复正常。但这不是长久之计,如果每次 ip 变动都需要重启一次 nginx,想想都头大。于是查询资料后获得了解决办法,方法如下:
\nlocation / {\t\n\tresolver 114.114.114.114 valid=60s; #自定义缓存有效时间间隔对变量中的域名进行解析\n\n\tset $my_server "https://ip:port";\n\n\tproxy_pass $my_server;\n}\n
\n",
"tags": [
"Linux",
"服务",
"经验分享",
"nginx"
]
},
{
"id": "https://blog.jingxiyuan.cn/2022/09/22/protobuf%E7%94%9F%E6%88%90js%E6%96%87%E4%BB%B6/",
"url": "https://blog.jingxiyuan.cn/2022/09/22/protobuf%E7%94%9F%E6%88%90js%E6%96%87%E4%BB%B6/",
"title": "protobuf生成js文件",
"date_published": "2022-09-22T02:30:00.000Z",
"content_html": "protoc-3.19.5-win64.zip
\n把 xxx.proto 文件拷贝到解压的 protoc-3.19.5-win64\\bin 目录下
\ncmd 到相同的 bin 目录下
\n执行 protoc.exe --js_out=import_style=commonjs,binary:. ./xxx.proto 命令,就会在 bin 目录下生成 xxx_pb.js 文件
\n今天前端开发跟我反馈用 vue 的 socketio 连接不上后台服务,连接无反应无任何报错。所以不清楚是前端代码问题还是后台服务的问题。由于框架为另一同事搭建,我只负责处理后端业务逻辑部分,所以第一时间我也不清楚具体的原因。于是我找了个第三方的 socket 工具尝试连接,果然有问题。但是只是提示连接不上,无明显错误原因。到后台查看发现有提示 Unknown transport for request 错误,最后通过调试发现 netty-socketio 的库中 AuthorizeHandler 类有段处理 transport 的代码只能接受大写的 WEBSOCKET 或者 POLLING,于是我在工具中按要求填上结果还是不行。然后我在网上搜索也未发现有相关问题,只发现有网友提示需要用 socketio 的库,不要自己写 socket 连接。于是我找了 socket.io.js 来连接,结果还是一样。经过大量调试改代码,最后突发奇想,有没有可能跟 netty-socketio 的版本有关系,于是我把版本从 1.7.20 升级到 1.7.21,结果就奇迹般的好了。
\nalgolia 不支持国内邮箱注册,而 google 和 github 由于国内被墙也没法使用。所以只能先注册 netlify 然后通过 netlify 注册 algolia。
\n登录 algolia 后创建一个 index,名字随意记住既可。
\n点击右上角红点,弹出窗口点 settings 按钮。
\n点击 API KEYS,获取 appId 和 adminApiKey 填入 hexo 的_config.yml 中 apiKey 暂时不填。
\nalgolia:\n appId: #Your appId\n apiKey: #Your apiKey\n adminApiKey: #Your adminApiKey\n chunkSize: 5000\n indexName: blog #"shoka"\n fields:\n - title #必须配置\n - path #必须配置\n - categories #推荐配置\n - content:strip:truncate,0,2000\n - gallery\n - photos\n - tags\n
\n点击 All Api Keys - New Api key 创建一个 api key,Indices 选先前让记住的 index,ACL 选下面图片中的选项。
\n把第 5 步中新建的 api key 填入到第 4 步中的配置中,到此已经完成了百分之九十,只需要重新编译发布即可。不过编译步骤多了一步,在 hexo g 后需要再执行 hexo algolia,至此搜索功能就大功告成了。
\n需要先安装好 mysql 数据库
\n选择版本,1.5 版以前支持中文,之后被维护的团队删除只支持英文
本文介绍使用的是 linuxserver_chevereto 的镜像
需要预先创建好给 chevereto 使用的库、账户、密码
\n映射路径(不要放在高速盘,否则会有权限问题)
\n
端口
\n
环境(puid 和 pgid 使用 1000,不要使用 0,否则会报错)
\n
使用 http:// 极空间 ip:81 (端口号使用上面配置的,我配置的是 81) 进行 web 访问(数据库配置)
\n
管理员配置(注意 website 配置选择个人,除非需要提供给其它人注册)
\n
\n
默认上传大小是 2M,可通过修改 php.ini 配置提升(路径 /etc/php7/php.ini 查找 upload_max_filesize 和 post_max_size 进行修改)。之后用管理员登录通过页面 http://xxx/dashboard/settings/image-upload 修改。
\n安装 nodejs
\n安装 git
\n安装 hexo(windows 需进入 git bash)
\nnpm install -g hexo-cli
初始化博客目录
\nhexo init blog
进入博客目录
\ncd blog
初始化 hexo 到博客目录
\nnpm install
下载主题
\ngit clone
https://github.com/amehime/hexo-theme-shoka.git ./themes/shoka
卸载 hexo-renderer-marked 以及别的 markdown 文件渲染器
\nnpm un hexo-renderer-marked --save
安装(md 文件渲染器,压缩 css/js/html)
\nnpm i hexo-renderer-multi-markdown-it --save
安装(给生成的 css 文件们添加浏览器前缀)
\nnpm i hexo-autoprefixer --save
安装(站内搜索功能)
\nnpm i hexo-algoliasearch --save
安装(文章或站点字数及阅读时间统计)
\nnpm i hexo-symbols-count-time --save
安装(生成 Feed 文件)
\nnpm i hexo-feed --save
清除静态文件
\nhexo clean
生成静态文件
\nhexo g
安装 git 推送插件
\nnpm install hexo-deployer-git --save
推送静态文件到 git
\nhexo d
npm install hexo-admin --save
hexo-admin 编辑 url
\n\nsettings 设置用户名、密码、Secret
\n\n把底部生成的配置拷入 hexo 配合文件中 (_config.yml)
\nadmin:\nusername: username\npassword_hash: xxxxxx\nsecret: 'my super secret phrase' #用单引号包裹\ndeployCommand: 'hexo_publish.sh' #windows用hexo_publish.bat,linux用hexo_publish.sh\n
\n#!/bin/bash\n\nhexo clean\nhexo g\nhexo d\n
\n@echo off\ncd D:\\blog\nd:\n@cmd /c "hexo clean&& hexo g&&hexo d&&echo success"\n
\n",
"tags": [
"Linux",
"服务",
"经验分享",
"博客",
"Hexo",
"Hexo-admin"
]
}
]
}