PVE中修改母机IP地址
在pve中,修改母鸡ip地址,一般需要修改3个文件
# 联网ip
vi /etc/network/interfaces
# 提示ip
vi /etc/issue
# 本机解析
vi /etc/hosts
修改完上面3个地址的ip以后,reboot,重启PVE。
在pve中,修改母鸡ip地址,一般需要修改3个文件
# 联网ip
vi /etc/network/interfaces
# 提示ip
vi /etc/issue
# 本机解析
vi /etc/hosts
修改完上面3个地址的ip以后,reboot,重启PVE。
docker container run -d -p 80:80 -p 443:443 --rm --name nginx nginx
--rm 停止后删除
-d 后台运行
-p 端口映射
--name 名称
docker container cp nginx:/etc/nginx .
mv nginx conf
这样,就将docker中的/etc/nginx 文件夹。 copy到了当前目录下
之后,通过mv,将nginx文件夹改名为conf
这个时候,看配置文件中,就可以看到根目录/usr/share/nginx/html
docker stop nginx # 前面--rm就保证了自动删除
docker container run -d -p 80:80 -p 443:443 \
--restart always \
-v $PWD/html:/usr/share/nginx/html \
-v $PWD/conf:/etc/nginx \
--name nginx \
nginx
备注:这里一般都需要映射2个目录:1是网站文件存储目录、2是nginx配置目录
server {
listen 80;
server_name localhost;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name localhost;
#请填写证书文件的相对路径或绝对路径
ssl_certificate /etc/nginx/certs/website.com_bundle.crt;
#请填写私钥文件的相对路径或绝对路径
ssl_certificate_key /etc/nginx/certs/website.com.key;
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1.2 TLSv1.3;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 404 /404.html;
}
因为不清楚,通过nginx部署出来的文件是否会被扫描,或者想从本地其他位置调取。
但是,在配置location时,碰到了root以及alias,简单记录一下,这2个的区别。
server {
location /image {
root /tmp/folder/;
autoindex on;
}
}
在上面这个配置里,使用了root
root的意思是,会在后面带上URI,所以,上面访问https://xxx.com/image/a.png实际上,访问的是/tmp/folder/image/a.png
server {
location /image {
alias /tmp/folder;
}
}
使用alias,后面不会带URI,所以,上面访问https://xxx.com/image/a.png实际上,访问的是/tmp/folder/a.png
总结:
root响应的路径:配置的(root)的路径 + 完整访问路径(location) + 静态文件
alias响应的路径:配置路径 + 静态文件
2者的区别,主要在于location的处理。
在网站上面开通了一台Linux机器以后,独立ipv4的附加,直接让小鸡面向全世界。这个时候,看着空荡荡的root命令行,需要做什么呢?
重中之重的第一件事,就是安全了。要知道,拥有独立ip的机器,不可避免被众多扫描脚本扫来扫去。
apt update
apt upgrade
apt install vim wget curl git
# 新建用户
adduser $USER
# 给新用户 sudo权限
usermod -aG sudo $USER
# ps->!! sudo时 出现 unable to resolve host解决办法
# 修改 /etc/hosts,把主机名添加进去即可
# 在新用户目录下添加key,以后key登录
cd ~
mkdir .ssh
cd .ssh
touch authorized_keys
sudo chmod 600 authorized_keys
vi authorized_keys # 打开的界面里,将自己的证书pub,插入进来
# 先测试,看能否key登录,后续再进行修改ssh登录端口
# 修改ssh登录端口、在打开的sshd_config中,逐行扫一遍,修改ssh端口、关闭root登录、关闭空密码、开放key登录
sudo vi /etc/ssh/sshd_config
# 重启ssh服务,sshd_config修改的会生效,下次连接的时候,要注意了
sudo systemctl restart sshd.service
在Linux中部署服务的时候,总会因为不同程序版本,导致失败,使用docker容器,一劳永逸!
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $(whoami)
OK,安装docker,并且将当前用户添加到了docker用户组,这样就不需要每次sudo来执行docker了
可以先使用free -m 来查看,如果已经存在,也可以不用安装了。
cd /opt
sudo mkdir swap
cd swap
sudo dd if=/dev/zero of=swapfile bs=1024 count=1000000 #1G大小
sudo mkswap /opt/swap/swapfile # 把文件转换为swap文件
sudo swapon /opt/swap/swapfile #激活
# 若需要开机自动挂载,需要修改/etc/fstab文件,在最后添加(sudo vi /etc/fstab)
/opt/swap/swapfile swap swap defaults 0 0
# 最后配置Swappiness值---定义使用交换空间的频率,0-100,默认60
cat /proc/sys/vm/swappiness # 查看当前swap使用频率
sudo vi /etc/sysctl.conf
# 在打开的文件的最后一行加上
vm.swappiness=40 # 数字越小,用的机会越少
完成,下面再带一些有关swap的删除操作
# 删除交换空间文件
sudo swapoff -v /opt/swap/swapfile
# 从/etc/fstab中去掉增加的自动挂载
# 最后删除实际的交换文件
sudo rm /opt/swap/swapfile
国际网络总会因为这样或那样的问题,抽风。所以,开启bbr算法,来优化一下。
# 查看内核
uname -a
# BBR内核要求为4.9,ubuntu18.04直接4.15
# 1.修改系统变量
sudo echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
sudo echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
# 2.保存生效
sysctl -p
# 3.查看内核是否已开启BBR
sysctl net.ipv4.tcp_available_congestion_control
显示如下:
net.ipv4.tcp_available_congestion_control = bbr cubic reno
# 4.查看BBR是否启动
lsmod | grep bbr
方便、但是差点意思,所以,后来,笔者改成了iptables原生。毕竟ufw也是控制iptables的一种。这里仅留作记录,证明曾经拥有这份知识!
# 安装
apt update && apt install ufw
# 查看状态
sudo ufw status
# 启用/禁用
sudo ufw enable
sudo ufw disable
# 查看规则
sudo ufw status numbered
# 添加规则
sudo ufw default deny #默认进站全禁
sudo ufw allow ssh # 添加22端口
sudo ufw allow http # 添加80端口
sudo ufw allow 80/tcp # 添加80端口 tcp协议
sudo ufw allow 33333/udp # 添加33333端口 udp协议
sudo ufw allow 8888:9999 # 添加8888到9999之间的接口
sudo ufw deny 11111 # 禁止11111端口
# 删除规则
sudo ufw delete allow 2222/tcp
sudo ufw delete <序号> # ufw status numbered 查回来的序号
# 禁ping
# 1.编辑配置文件
sudo vim /etc/ufw/before.rules
# 2.允许ping
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT
# 3.禁止ping
-A ufw-before-input -p icmp --icmp-type echo-request -j DROP
# 4.让配置生效
sudo ufw reload
# 禁止ip
sudo ufw insert 1 deny from 1.1.1.1/16 to any
# 因为ufw的匹配机制,所以,后面拦截ip的时候,需要使用insert 1,表示插入第一
# 封禁ip
sudo vi /etc/ufw/before.rules
# 在 # End required lines 后面添加
-A ufw-before-input -s 162.243.0.0/16 -j DROP
-A ufw-before-input -s 59.83.0.0/16 -j DROP
# 之后
sudo ufw reload
占个坑,还没研究过。
在debian系统中,普通用户,无法输出类似ifconfig之类的命令
在用户的~/.profile文件里增加下面的配置
\# set PATH /usr/sbin
if [ -d "/usr/sbin" ] ; then
PATH="/usr/sbin:$PATH"
fi
这样,每次ssh上来的时候,就能够自动加载了
在有的debian或ubuntu系统中,apt install 有时候无法补全相关命令
sudo apt install bash-completion
\# 之后在~/.bashrc文件中,添加—已有则不需要添加下面内容
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
有时候为了测试目标网站指定端口是否存在tcp服务,使用tcping工具
Debian/Ubuntu下安装方法:
# tcping会依赖tcptraceroute
sudo apt install tcptraceroute
# 下载
sudo wget http://www.vdberg.org/~richard/tcpping -O /usr/bin/tcping
# 增加执行权限
sudo chmod +x /usr/bin/tcping
除了tcping意外,还可以使用ncat(又叫nc)。不过nc,就等到额外的写了。
ssh -L 127.0.0.1:10000:192.168.10.10:20000 -N -f username@192.168.10.2
-L 创建本地端口转发
-f 提示 ssh在后台运行
-N 提示 ssh 不要登录远程服务器
上面就是,将本地的10000端口通过192.168.10.2 转发到192.168.10.10的20000端口上
接下来,访问本地的10000端口,实际上就是访问的远程主机的20000端口了
ssh -R 8080:127.0.0.1:3000 -N -f username@192.168.10.2
-R 创建远程端口转发
这个时候,当有人访问192.168.10.2的时候,就会通过转发,实际上访问的是你本机的3000端口了
Ps: 设置远程端口转发遇到问题时,需要看ssh服务器配置中的 GatewayPorts 设置为 yes.
ssh -D 3000 username@192.168.10.2 -N
-D 创建动态转发,也就是隧道
这个时候,访问本地的3000端口,实际上,就是通过192.168.10.2 进行访问的
这种转发采用了SOCKS5,需要把HTTP请求转发成SOCKS5协议
举个栗子:
curl -x socks5://localhost:3000 http://www.example.com
请求被代理了,实际上访问example.com使用的是192.168.10.2
以下内容来自GPT,如果侵权,请联系管理员删除。
在Linux中,你可以使用wget命令进行文件下载,并且可以通过一些参数来实现断点续传。具体的参数是-c或--continue,它告诉wget从上次下载中断的地方继续下载。
下面是使用wget进行断点续传的示例命令:
wget -c <URL>
请将
注意:断点续传功能要求服务器支持Range头部,这样wget才能向服务器发送请求以获取文件的部分内容。不是所有的服务器都支持断点续传,如果服务器不支持,wget将无法进行断点续传。
备注:环境Debian/Ubuntu
# 编译前的准备
sudo apt install g++ cmake curl wget gcc gdb
# 下载并开始编译
wget https://boostorg.jfrog.io/artifactory/main/release/1.81.0/source/boost_1_81_0.tar.gz
tar -zxvf boost_1_81_0.tar.gz
cd boost_1_81_0/
./bootstrap.sh --with-libraries=all --with-toolset=gcc
./b2 toolset=gcc
# 查看有什么错误信息
./b2 -q
# 安装到指定位置
./b2 install --prefix=/opt/boost1.81
占位,留到后面添加