Linux Operations & Deployment Notes | 服务部署与运维

"Linux"

⏱️ Words: 516 | Reading Time: 2min
Posted on August 22, 2023

“”

Linux Operations & Deployment Notes

2023-04-23

Yibo Li

yli12@stevens.edu; yiboli@link.cuhk.edu.hk

http://eborlee.github.io

Table Of Contents

1 使用Nginx进行反向代理

Steps:

  1. 创建Nginx反向代理配置文件

    /usr/ebor/nginx下创建配置文件

    location后跟匹配规则:

    #路径完全一样则匹配 location = path { }

    #路径开头一样则匹配 location ^~ path{ }

    #正则匹配,大小写敏感 location ~ path{ }

    #正则匹配,大小写不敏感 location ~* path{ }

    #前缀匹配 location path{ }

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    server {
        listen 80;
        servername ip_address;
        location /ebor/ {
            proxy_pass http://eborlee.github.io; // 注意这里必须是http而不能是https,否则404
               
            // 或者是ip_address,这个貌似没什么作用,
            // 对于博客来说加不加都可访问,而对于大站点,会导致Host ip与实际IP不符从而被403 Forbidden
            proxy_set_header Host $host; 
        }
    }
       
    

    proxy_set_header Host $http_host; $http_host:代理服务器本身IP,不改变请求头的值. $proxy_host 会重新设置请求头 $host 请求未携带HOST请求头时为虚拟主机的主域名

    proxy_set_header X-Real-IP $remote_addr;

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; X-Forwarded-For: client1, proxy1, proxy2\

    proxy_pass后的URL的写法问题:

    第一种: location /proxy/ { proxy_pass http://127.0.0.1/; } 代理到URL:http://127.0.0.1/test.html

    第二种(相对于第一种,最后少一个 / ) location /proxy/ { proxy_pass http://127.0.0.1; } 代理到URL:http://127.0.0.1/proxy/test.html

    第三种: location /proxy/ { proxy_pass http://127.0.0.1/aaa/; } 代理到URL:http://127.0.0.1/aaa/test.html

    第四种(相对于第三种,最后少一个 / ) location /proxy/ { proxy_pass http://127.0.0.1/aaa; } 代理到URL:http://127.0.0.1/aaatest.html

  2. Docker部署Nginx容器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
docker pull nginx
# 创建启动服务,并将宿主机的配置文件映射到docker容器内部的主配置文件上
docker run --name my-nginx -v /usr/ebor/nginx/my_nginx.conf:/etc/nginx/nginx.conf:ro -p 80:80 -d nginx

# 修改后宿主机配置文件后,更新配置
docker exec -it my-nginx nginx -s reload

# 重启docker服务
docker restart my-nginx

# 进入容器内部查看主配置文件是否更新
docker exec -it my-nginx /bin/sh
cat /etc/nginx/nginx.conf

2 部署OpenVpn代理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 拉取openvpn docker镜像
sudo docker pull kylemanna/openvpn

# 创建数据卷
sudo docker volume create --name openvpn-data

# 初始化配置
sudo docker run -v openvpn-data:/etc/openvpn --rm kylemanna/openvpn ovpn_genconfig -u udp://[服务器公网IP]

# 生成密钥和证书,会要求依次输入new ca key passphrase和common name,即IP地址或域名
sudo docker run -v openvpn-data:/etc/openvpn --rm -it kylemanna/openvpn ovpn_initpki

# 启动服务容器
sudo docker run -v openvpn-data:/etc/openvpn -d -p 1194:1194/udp --cap-add=NET_ADMIN kylemanna/openvpn

# 生成客户端证书
sudo docker run -v openvpn-data:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full [客户端名] nopass

# 导出客户端配置文件,会在当前文件夹下创建一个ovpn文件,下载到本机
sudo docker run -v openvpn-data:/etc/openvpn --rm kylemanna/openvpn ovpn_getclient [客户端名] > [客户端名].ovpn

window和mac去官网下载openvpn客户端,导入opvn配置文件

Compress 问题:

1
2
3
4
Sat Sep 9 14:15:38 2023 Compression or compression stub framing is not allowed since data-channel offloading is enabled.
Sat Sep 9 14:15:38 2023 OPTIONS ERROR: server pushed compression settings that are not allowed and will result in a non-working connection. See also allow-compression in the manual.
Sat Sep 9 14:15:38 2023 ERROR: Failed to apply push options
Sat Sep 9 14:15:38 2023 Failed to open tun/tap interface

Solution:

检查服务器和客户端各自的配置文件中是否都有comp-lzo no