利用openwrt路由器屏蔽小米电视广告

小米电视便宜是便宜,就是开机广告很是烦人,我们可以利用路由器的黑名单功能屏蔽小米电视广告推送域名,由此屏蔽开机广告,我使用的是自己刷了openwrt的路由器,操作起来稍微复杂一些。

准备工具

需要使用putty或者其他能够使用ssh连接openwrt的工具,我使用的是windows 10的Linux子系统(似乎我使用的windows10版本的命令提示符也可以是用ssh工具,可以尝试)

操作过程

(一)使用windows10自带的命令提示符输入以下命令

ssh root@192.168.1.1

输入密码登录

《利用openwrt路由器屏蔽小米电视广告》

在/etc/目录下新建一个文件“myhosts”

vi /etc/myhosts

输入上述命令回车后会进入vi编辑器,然后输入“i”进入编辑模式

复制以下内容,到vi编辑器里点击鼠标右键粘贴

127.0.0.1 ad.mi.com
127.0.0.1 api.ad.xiaomi.com
127.0.0.1 t7z.cupid.ptqy.gitv.tv
127.0.0.1 stat.pandora.xiaomi.com
127.0.0.1 upgrade.mishop.pandora.xiaomi.com
127.0.0.1 logonext.tv.kuyun.com
127.0.0.1 config.kuyun.com
127.0.0.1 api.io.mi.com
127.0.0.1 mishop.pandora.xiaomi.com
127.0.0.1 dvb.pandora.xiaomi.com
127.0.0.1 de.pandora.xiaomi.com
127.0.0.1 data.mistat.xiaomi.com
127.0.0.1 jellyfish.pandora.xiaomi.com
127.0.0.1 gallery.pandora.xiaomi.com
127.0.0.1 o2o.api.xiaomi.com
127.0.0.1 bss.pandora.xiaomi.com
127.0.0.1 gvod.aiseejapp.atianqi.com
127.0.0.1 sdkconfig.ad.xiaomi.com
127.0.0.1 staging.ai.api.xiaomi.com
127.0.0.1 b.netcheck.gallery.pandora.xiaomi.com
127.0.0.1 f1.market.xiaomi.com
127.0.0.1 f2.market.xiaomi.com
127.0.0.1 f3.market.xiaomi.com
127.0.0.1 f4.market.xiaomi.com
127.0.0.1 f5.market.xiaomi.com
127.0.0.1 ad.doubleclick.net
127.0.0.1 v.admaster.com.cn
127.0.0.1 f1.market.mi-img.com
127.0.0.1 f2.market.mi-img.com
127.0.0.1 f3.market.mi-img.com
127.0.0.1 f4.market.mi-img.com
127.0.0.1 f5.market.mi-img.com
127.0.0.1 g.dtv.cn.miaozhan.com
127.0.0.1 new.api.ad.xiaomi.com
127.0.0.1 o2o.api.xiaomi.com

按下键盘 的“Esc”键,再输入“:wq”回车保存退出

(二)使用浏览器登录进入openwrt,并转到“网络”-“DHCP/DNS”

《利用openwrt路由器屏蔽小米电视广告》

转到“HOSTS和解析文件”,检查“额外的HOSTS文件”部分是否包含“/etc/hosts”,没有就自己输入。

《利用openwrt路由器屏蔽小米电视广告》

(三)进入小米电视使用电视管家清除所有缓存文件,重启小米电视就应该没有广告了。

R7800 openwrt安装 阿里云DDNS

固件下载

https://openwrt.org/toh/netgear/r7800

更改来源

http://mirrors.ustc.edu.cn/lede/releases/

ssh连接

opkg install luci-i18n-base-zh-cn luci-i18n-firewall-zh-cn luci-i18n-upnp-zh-cn luci-app-upnp luci-i18n-ddns-zh-cn luci-app-ddns luci-app-nlbwmon luci-i18n-nlbwmon-zh-cn wpad ddns-scripts_cloudflare.com-v4 vsftpd openssh-sftp-server luci-app-wifischedule luci-i18n-wifischedule-zh-cn luci-app-mwan3 luci-i18n-mwan3-zh-cn wget libpcre
/etc/init.d/vsftpd enable
/etc/init.d/vsftpd start

下载阿里云DDNS

https://github.com/sensec/ddns-scripts_aliyun

https://www.right.com.cn/forum/thread-267501-1-1.html

负载均衡关闭IPv6

请把这个文件/lib/mwan3/mwan3.sh
中的
改成

#IPT6="/usr/sbin/ip6tables -t mangle -w"
IPT6="/bin/true"

ipv6不再受负载均衡限制了。一切正常了。

/usr/share/miniupnpd/firewall.include

#IP6TABLES=/usr/sbin/ip6tables
IP6TABLES=/bin/true

CentOS 安装Wireguard

2017年,新一代VPN技术wireguard诞生。wireguard基于linux kernel内核运行,效率极高,速度很快,而且支持设备IP地址漫游功能,不仅适合服务器之间的互联,还适合在NAT环境下使用,包括家中的智能路由器,配合openwrt等路由器,可安装wireguard,实现路由器绑定wireguard代理功能。

其实我已经用Wireguard 很久了,但是一直没有时间去写如何配置,抽空写一篇博客来证明一下我自己还没死(

1. Wireguard 服务器配置

我用的是CentOS 7 64bit系统,而内核我使用的是 Linux 4.11.2-1.el7.elrepo 这个版本,因为这个版本是支持lotServer的,如果没有lotServer的授权,你也可以用nanqinglang 魔改版BBR。

首先先更新系统内核,我们执行以下命令

sudo yum update -y 

设置 grub 来使使用新内核默认启动

sudo grub2-set-default 0
sudo grub2-mkconfig

启动完毕后我们加入 Wireguard 的 yum 源

sudo curl -Lo /etc/yum.repos.d/wireguard.repo https://copr.fedorainfracloud.org/coprs/jdoss/wireguard/repo/epel-7/jdoss-wireguard-epel-7.repo
sudo yum install epel-release -y
sudo yum install wireguard-dkms wireguard-tools -y

记得开启IPv4的转发

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

随后,使用命令创建Publickey和PrivateKey

mkdir /etc/wireguard
cd /etc/wireguard
wg genkey | tee privatekey | wg pubkey > publickey
chmod 777 -R /etc/wireguard
vim /etc/wireguard/wg0.conf

服务器端需要以下内容

[Interface]
Address = 10.0.0.1/24
ListenPort = 56660
PrivateKey = <Private Key>
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
SaveConfig = true

PrivateKey则是你刚生成的PrivateKey,需要填入进去。PostUP和PostDown是开启和关闭时分别执行的命令,你需要根据需求自行修改。

创建服务器端的自动启动

systemctl enable wg-quick@wg0

启动服务器端

wg-quick up wg0
wg-quick down wg0 && wg-quick up wg0 

至此,服务器端已经配置完毕,我们需要配置客户端

2.客户端配置

安装过程与服务器一直,但是配置文件是不一样的,具体的需要看你的需求。

假设我们需要将两台服务器互联,以便访问其内网中设备。我们的配置将如下:

[Interface]
Address = 10.0.0.2/24
ListenPort = 56660
PrivateKey = <Private Key>
PostUp = bash /etc/route-add 
PostDown = bash /etc/route-del
SaveConfig = true
 
[Peer]
PublicKey = <服务器端的Public Key>
AllowedIPs = 10.0.0.1/32
Endpoint = 服务器端的公网IP:56660

然后,这边需要注意的是AllowedIPs  如果你写了0.0.0.0/0,你可能会被全部reroute,从而导致连不上服务器。因此我这边推荐你设置为两边的IP先测试完毕再调全局。

随后一样的,启动wireguard。

在服务器端设置以下内容

wg set wg0 peer <客户端的Public Key> allowed-ips 10.0.0.1/32

然后你会发现两个内网IP可以互通,

ping -c 10 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=28.5 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=28.4 ms
64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=28.5 ms
64 bytes from 10.0.0.1: icmp_seq=4 ttl=64 time=28.5 ms
64 bytes from 10.0.0.1: icmp_seq=5 ttl=64 time=28.5 ms
64 bytes from 10.0.0.1: icmp_seq=6 ttl=64 time=28.3 ms
64 bytes from 10.0.0.1: icmp_seq=7 ttl=64 time=28.6 ms
64 bytes from 10.0.0.1: icmp_seq=8 ttl=64 time=28.6 ms
64 bytes from 10.0.0.1: icmp_seq=9 ttl=64 time=28.3 ms
64 bytes from 10.0.0.1: icmp_seq=10 ttl=64 time=28.5 ms

--- 10.0.0.1 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9012ms
rtt min/avg/max/mdev = 28.360/28.522/28.688/0.207 ms

那么,我们的wireguard就算是通了,现在要仔细来调整这个路由让他来符合我们的需求。

就拿刚刚所说,如果是为了访问互相的内网,你需要把内网IP加入到 AllowedIPs  里面,用逗号区分。

比如说如下

[Interface]
Address = 10.0.0.2/24
ListenPort = 56660
PrivateKey = <Private Key>
PostUp = bash /etc/route-add 
PostDown = bash /etc/route-del
SaveConfig = true
 
[Peer]
PublicKey = <服务器端的Public Key>
AllowedIPs = 10.0.0.1/32, 192.168.0.0/16
Endpoint = 服务器端的公网IP:56660

在你启动wireguard后,你能访问到服务器端的192.168.0.0/16这个段,哦当然,这种可以认为是对等互联,所以不存在服务器或者客户端这种说法。

而另外一种做法,是在路由器上部署的,实现翻墙功能,这种配置应该是这么写的

[Interface]
Address = 10.0.0.2/24
ListenPort = 56660
PrivateKey = <Private Key>
PostUp = bash /etc/route-add 
PostDown = bash /etc/route-del
SaveConfig = true
 
[Peer]
PublicKey = <服务器端的Public Key>
AllowedIPs = 0.0.0.0/0
Endpoint = 服务器端的公网IP:56660
PersistentKeepalive = 25

另外一点,你需要编辑一下 /etc/route-add 来确保你的服务器IP不走wireguard,否则可能会连不上。

启动后,默认会将你所有流量都通过wg0这个接口到你的服务器上,实现科学上网。

2.用 wg-quick 调用 wg0.conf 管理 WireGuard

可以把 WireGuard 的配置保存在一个配置文件中(见 1.用 Linode 主机搭建 WireGuard 网络 ),启动虚拟网卡时直接调用。配置文件可以起任何文件名,扩展名必须为 .conf ,默认存储在 /etc/wireguard/ 目录,也可以存储到其它系统默认的查找路径中,以下假设使用的配置文件为 wg0.conf 。

1. wg0.conf 参数

配置文件分两部分,一个是 [Interface] 部分,用于设置本机的参数;一个是 [Peer] 部分,用于设置连接到本机的其它电脑的参数,[Peer] 部分可以包含多个节点。

[Interface]
Address =  
ListenPort =  
PrivateKey =  
DNS =  

[Peer]
AllowedIPs =  
Endpoint =  
PublicKey =  
PersistentKeepalive =  

1.1 [Interface] 部分介绍

  1. Address:设置虚拟网卡的内网地址(可选子网掩码),填写规则:
    • 可以填写任何符合规范(内网地址可选范围见链接 1,2)的内网地址,但要保证不与虚拟局域网内其它电脑的内网地址相同;
    • 可以写两行;(可选)可以写成自己的IPV6地址: Address = fd86:ea04:1115::1/64 。
  2. ListenPort:设置 udp 监听端口,可选范围为 49152 到 65535 。
  3. PrivateKey:填写本机的私钥,默认存储在本机的 /etc/wireguard/private.key 文本中。
  4. PostUp:wg-quick up wg0 启动后执行的内核防火墙( iptables )规则,可以打通 VPN ,服务器端需此参数。
  5. PostDown:wg-quick down wg0 执行删除启动时定义的内核防火墙( iptables )规则 ,服务器端需此参数。
  6. DNS ,设置 DNS ,不正确设置客户端浏览器网页会无法访问外网地址。
  7. SaveConfig:设为 true 之后,每次重启服务(stop service时)都会自动保存 config 。
  8. MTU:一般不用改,1500没问题

1.2 [Peer] 部分介绍

  1. PublicKey :连接来节点的公钥,默认存储在其它电脑的 /etc/wireguard/public.key 文本中。
  2. AllowedIPs:允许连接的内网 ip 地址。
    • 服务器与客户端应该在同一网段,如客户端的IP为 10.0.2.1/24 ,那么这里可以设置为 10.0.2.0/24 ;
    • 可以写多个,用逗号隔开。
    • 如果写为 0.0.0.0/0 表示允许任何节点连接。
  3. Endpoint :节点的外网 IP 及端口号,服务器端不需要填写。
  4. PersistentKeepalive:用来保持连接检查的,每过25s会自动检查连通性,如果IP有变化,也是通过这个自动更新endpoint。

2. 服务器配置实例

以下是一对实际可用的服务器及本地机配置文件。

文件位置:服务器 /etc/wireguard/wg0.conf

[Interface]
Address = 10.0.0.1
ListenPort = 39814
PrivateKey = UA0je5EciV9i2+dSbf5mWAvRkUDVLxE/4ijMb1VnWWw=
DNS = 8.8.8.8
PostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[peer]
AllowedIPs = 10.0.0.2 
PublicKey = odnA2mMWrxRuKydr61bOL3xyGcKiD0KY7O33X8Rm4Hg= 

注:服务器端必须填写路由规则,也就是 PostUp 、PostDown ;如果执行 ifconfig 显示服务器的网卡设备名称不是 eth0 而是别的名称 ,需要把 PostUp 与 PostDown 参数中的 eth0 改为你设备的名称。

3. 本地机可用配置

文件位置:本地机 /etc/wireguard/wg0.conf

[Interface]
Address = 10.0.0.2
ListenPort = 39815
PrivateKey = +JzG3eOIR0gNPzU3IDIDSR0sYgHKGH3Otr4ronpAVHw=
DNS = 8.8.8.8

[Peer]
AllowedIPs = 0.0.0.0/0
Endpoint = 139.162.88.79:39814
PublicKey = hIGcDUcR1Ob+GyLKQ9NJhx4qjWmXpOcKURXWkMDYKjc=
PersistentKeepalive = 25

4. 虚拟网络的启动与关闭

启动虚拟网络执行 wg-quick up wg0 ,正确执行后显示如下:

[#] ip link add wg1 type wireguard
[#] wg setconf wg1 /dev/fd/63
[#] ip address add 10.0.0.2 dev wg1
[#] ip link set mtu 1420 dev wg1
[#] ip link set wg1 up
[#] resolvconf -a tun.wg1 -m 0 -x
[#] wg set wg1 fwmark 51820
[#] ip -4 route add 0.0.0.0/0 dev wg1 table 51820
[#] ip -4 rule add not fwmark 51820 table 51820
[#] ip -4 rule add table main suppress_prefixlength 0

关闭虚拟网络执行 wg-quick down wg0 ,正确执行后显示如下:

[#] ip -4 rule delete table 51820
[#] ip -4 rule delete table main suppress_prefixlength 0
[#] ip link delete dev wg1
[#] resolvconf -d tun.wg1

5. 参考链接

https://github.com/wgredlong/WireGuard

参考 https://www.wireguard.com/install/
参考 https://kotori.net/2018/10/21/centos-安装最新版的wireguard/

关于Nginx反向代理DDNS的DNS缓存问题

在使用nginx做反向代理的,将请求发送到一个动态DDNS域名的时候,该动态DDNS域名对应的IP是A ,刚开始运行一切正常,但是当运行了一段时间以后,该动态DDNS域名对应的IP变了之后(例如对应的IP由A变为B),nginx的转发仍然还在向原先的IP A发送请求,导致反向代理中断,此时reload nginx后才会重新恢复正常,且日志显示数据转发到新的IP B了,请问如何让nginx自动去重新解析域名,而不用每次出现问题了人工去reload?

造成这个问题的主要原因是,在Nginx启动的时候会做域名解析,然后把IP缓存起来以后会一直使用解析到的IP并且不会再更改,除非重新启动Nginx,Nginx才会重新解析域名。

第一种解决方案,利用nginx的resolver

1、默认nginx会通过操作系统设置的DNS服务器(/etc/resolv.conf)去解析域名

2、其实nginx还可以通过自身设置DNS服务器,而不用去找操作系统的DNS

3、下面来讲一个这个resolver示例配置如下:

server {
listen 8080;
server_name localhost;
resolver 114.114.114.114 223.5.5.5 valid=3600s;
resolver_timeout 3s;
location / {
proxy_pass http://mydomain.com;
}
}

参数说明:

# resolver 可以在http全局设定,也可在server里面设定
# resolver 后面指定DNS服务器,可以指定多个,空格隔开
# valid设置DNS缓存失效时间,自己根据情况判断,建议600以上
# resolver_timeout 指定解析域名时,DNS服务器的超时时间,建议3秒左右

#注意:当resolver 后面跟多个DNS服务器时,一定要保证这些DNS服务器都是有效的,因为这种是负载均衡模式的,当DNS记录失效了(超过valid时间),首先由第一个DNS服务器(114.114.114.114)去解析,下一次继续失效时由第二个DNS服务器(223.5.5.5)去解析,亲自测试的,如有任何一个DNS服务器是坏的,那么这一次的解析会一直持续到resolver_timeout ,然后解析失败,且日志报错解析不了域名,通过页面抛出502错误。

第二种解决方法——最佳解决方案是升级到tengine 2.1.2,淘宝出品的东西,已经自带了解决方案。

Tengine的模块ngx_http_upstream_dynamic_module,此模块提供了在运行时动态解析upstream中server域名的功能。

upstream backend {
dynamic_resolve fallback=stale fail_timeout=30s;
server a.com;
server b.com;
}

server {

location / {
proxy_pass http://backend;
}
}

(一)upstream的用法
1、upstream

作用:是用来定义服务器组的模块

使用范围:proxy_pass、fastcgi_pass、memcached_pass

结构:

upstream groupName {    server serverName1 [param1=value1] [param2=value2] [param3];    server serverName2;}

groupName即为组名,是自定义的,如:upstream webserver;

2、server

upstream中的server用来指定一个服务器。

server的类型可以是:

  • (1)域名:如:webserver.website.com;
  • (2)IP:如:192.168.0.239:80;
  • (3)Unix套接字文件:如unix:/tmp/webserver;

例如:

upstream webserver {     server httpweb.withec.com;     server 192.168.18.201 weight=5 max_fails=3 fail_timeout=20s;     server 192.168.18.202 backup;     server 192.168.18.293 down;     server unix:/tmp/httpdweb;}

server中可用的参数:

  • (1)weight:表示权重,权重越大,表示被访问的概率越大

用法:weight=数字;

server 192.168.18.201 weight=4;
  • (2)max_fails:表示连接失败重新连接的最多次数

用法:max_fails=3;

如:

server 192.168.18.202 max_fails=3;
  • (3)fail_timeout:连接超时的时间(即多久算连接失败)

用法:fail_timeout=时间;

如:20秒就算连接失败

server 192.168.18.202 max_fails=3 fail_timeout=20s;
  • (4)backup:标记一台服务器作为备用服务器(它只在其他服务器繁忙的时候工作)

用法:server serverName backup;

如:

server 192.168.18.203 backup;
  • (5)down:标记一台服务器下线或者暂时不可用

用法:server serverName down;

如:

server 192.168.18.203 down;
  • (6)max_conns:表示指定的服务器最大连接数限制(nginx1.5.9以上版本才有的参数)

用法:max_conns=数字;

如:

server 192.168.18.202 max_conns=1024;
(二)、upstream实验:

4台机器:

  • IP:192.168.18.200(作前端服务器)
  • 192.168.18.201
  • 192.168.18.202
  • 192.168.18.203

步骤:

  • 1、三台机器上的nginx都需要启动,并在各自web根目录下的index.html的文件中加入机器识别信息,具体如下:
    • 200的机器上的index.html添加:from 200
    • 201的机器上的index.html,添加:from 201
    • 202的机器上的index.html,添加:from 202
    • 203的机器上的index.html,添加:form 203
  • 2、在237的机器上配置nginx(1)在http块中加入:
upstream webserver {      
server 192.168.18.201:80;      
server 192.168.18.202:80;      
server 192.168.18.203:80;}

       (2)在server区段的location段加入:

location / {    proxy_pass http://webserver;}

注:webserver这个组名前一定要记住加http://

打开浏览器访问:http://192.168.18.200,查看显示内容

  • 发现显示”from 201”
  • 刷新显示”from 202”
  • 再刷新显示”from 203”
  • 再刷新显示””from 201

依次刷新会在这三台机器之间循环(这种专业的叫法叫轮询)

(三)upstream模块主要指令
  • 1、hash:指定轮询的规则按照指定的key值来计算

用法:hash key;

这个key可以包含文本,变量或者文本与变量的组合。

  • 2、ip_hash;指定轮询的规则按照ip的hash值来计算

针对上面的实验:我们在upstream中加入ip_hash,再查看:

发现我们无论怎么刷新,访问的都是201上面的文件(因为客户端的IP没变)

升级到tengine

下载

https://tengine.taobao.org/download_cn.html

yum install lua-devel
wget -c https://tengine.taobao.org/download/tengine-2.3.2.tar.gz
tar zxvf tengine*
cd tengine*
./configure --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-openssl=/usr/local/src/openssl --with-openssl-opt=enable-tls1_3 --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_degradation_module --with-http_flv_module --with-http_geoip_module=dynamic --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-stream=dynamic --with-stream_ssl_module --with-stream_realip_module --with-stream_geoip_module=dynamic --with-stream_ssl_preread_module --with-stream_sni --with-jemalloc --with-pcre --with-pcre-jit --with-cc-opt='-O2 -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=native' --with-ld-opt='-Wl,-z,relro -Wl,-E' --add-dynamic-module=./modules/ngx_http_concat_module --add-dynamic-module=./modules/ngx_http_footer_filter_module --add-dynamic-module=./modules/ngx_http_proxy_connect_module --add-dynamic-module=./modules/ngx_http_reqstat_module --add-dynamic-module=./modules/ngx_http_sysguard_module --add-dynamic-module=./modules/ngx_http_trim_filter_module --add-dynamic-module=./modules/ngx_http_upstream_check_module --add-dynamic-module=./modules/ngx_http_upstream_consistent_hash_module --add-dynamic-module=./modules/ngx_http_upstream_dynamic_module --add-dynamic-module=./modules/ngx_http_upstream_dyups_module --add-dynamic-module=./modules/ngx_http_upstream_session_sticky_module --add-dynamic-module=./modules/ngx_http_user_agent_module --add-dynamic-module=./modules/ngx_slab_stat --add-dynamic-module=./modules/ngx_http_lua_module --add-dynamic-module=/usr/local/src/ngx_devel_kit --add-dynamic-module=./modules/ngx_http_slice_module
sudo make install

设置为系统服务
1:系统用户登录系统后启动的服务 的目录

/usr/lib/systemd/system

2:如需要开机没有登陆情况下就能运行的程序在系统目录内

/lib/systemd/system

3:我希望系统开机就启动目录,所以我把文件放在系统目录内。

vim /lib/systemd/system/nginx.service 创建文件

[Unit]
Description=The nginx HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target
 
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
 
[Install]
WantedBy=multi-user.target
chmod 745 /lib/systemd/system/nginx.service 
systemctl enable nginx.service
systemctl start nginx.service

Raspberrypi 源使用帮助

地址

https://mirrors.ustc.edu.cn/archive.raspberrypi.org/

说明

树莓派的 archive.raspberrypi.org 软件源,也即 /etc/apt/sources.list.d/raspi.list ,

是由树莓派基金会提供的软件源,包括 ui 相关程序 ( 如 Raspbian 的桌面环境 PIXEL DE) 及部分由树莓派基金会为 树莓派编写的软件,通常与 archive.raspbian.org ( 参考 Raspbian 源使用帮助 ) 一起使用。

收录架构

  • armhf
  • x86
  • x86_64

收录版本

  • jessie
  • stretch
  • buster

Module Signing

Upgrading from 2.11 and have unsigned modules?

You may have come here because you’ve seen this security warning pop up, and you have a pile of unsigned modules. Don’t panic! You just haven’t completed the last part of the upgrade from 2.11 to 12.  You need to log in to your FreePBX server via ssh, or via the console, and run the following three commands:

fwconsole chown
fwconsole ma refreshsignatures
fwconsole reload

GPG Verify File check failed for FreePBX Module Upgrade

Please login to console/SSH and run follow command:

#
#
sudo -u asterisk gpg --refresh-keys --keyserver pool.sks-keyservers.net
sudo -u asterisk gpg --refresh-keys --keyserver hkp://keyserver.ubuntu.com:80
#
fwconsole ma upgrade framework --tag 15.0.16.38

Once done, please update your FreePBX modules via web interface again.

#
#
fwconsole setting MODULE_REPO https://mirror.freepbx.org
sudo chown -R asterisk:asterisk /home/asterisk/