Linux基础20

部署python、灰度发布、网站限流限速、Nginx实现跨域

一、部署python

​    安装python依赖软件

```shell
yum  -y install  gcc  make  python3  python3-devel
```

​    安装python网站的依赖包,python的软件包使用pip3安装

```shell
pip3 install  pytz-2022.6-py2.py3-none-any.whl
pip3 install  Django-1.11.8-py2.py3-none-any.whl
pip3 install  django-bootstrap3-11.0.0.tar.gz
```

​    测试

```shell
python3 manage.py runserver 0.0.0.0:8000    #manage.py网站运行的引导文件
```

<img src="LINUXNSD_V01OPERATIONDAY04_005.png" style="zoom:50%;" />

​    安装uWSGI

```shell
pip3 install uWSGI-2.0.21.tar.gz
```

​    编写配置文件

```shell
[root@proxy python]# vim myproject.ini  #要以ini结尾,文件名自定义
------------------------------------------------------------------------
[uwsgi]
socket=127.0.0.1:8000                   #与web服务(nginx)通信的接口
chdir=/var/python/python-project-demo   #网站的工作目录
wsgi-file=learning_log/wsgi.py          #定义网站运行时,uwsgi调用的脚本文件
daemonize=/var/log/uwsgi.log            #指定日志文件位置
```

​    运行uWSGI

```shell
uwsgi --ini myproject.ini  #读取myproject.ini运行uWSGI
ss -antlp | grep 8000       #8000已经监听,成功启动
```

​    修改nginx配置文件,添加uWSGI转发

```shell
location / {
    uwsgi_pass 127.0.0.1:8000;     #动态页面交给uWSGI
    include uwsgi_params;          #加载调用uWSGI配置文件
    root   html;
    index  index.html index.htm;
}
```

​    测试,访问192.168.99.5

二、灰度发布

> 灰度发布使用平稳的过度方式升级或替换产品项目的方法统称

1.配置Nginx实现用IP测试灰度发布

版本布局:

​        当前版本(v1)——web1:80、web2:80

​        测试版本(v2)——web1:8001

​    为web1和web2搭建nginx虚拟主机,需要注意httpd是否在占用80端口

​    修改web1与web2的nginx配置文件并创建对应的网页

```shell
#web1的nginx配置文件
http {    
...
    server {                      #新添加的测试server
        listen       8000;
        server_name  localhost;
        root html8000;
        index index.html;
    }
    server {
        listen       80;
        server_name  localhost;
...
echo    "test web1 nginx 8000"    >    html8000/index.html
echo    "test web1 nginx 80"    >    html/index.html
-----------------------------------------------------------------------
#web2的nginx配置文件
http {    
...
    server {
        listen       80;
        server_name  localhost;
...
echo    "test web2 nginx 80"    >    html/index.html
```

​    修改proxy的nginx集群配置

```shell
http {
...
    upstream default {              #当前版本业务集群
        server 192.168.99.100:80;
        server 192.168.99.200:80;
    }
    upstream testserver {
        server 192.168.99.100:8000;    #测试版本业务集群
    }
    server {
        listen       80;
        server_name  localhost;
        #设置自定义变量$group,默认访问default集群
        set $group "default";
        if ($remote_addr ~ "192.168.99.1"){
            #如果客户机ip包含192.168.99.1就访问测试版本业务集群
            #remote_addr是nginx的内置变量,存放访问者的ip
            set $group testserver;    #重新赋值变量
        }

        location / {
            proxy_pass http://$group;       #调用集群
            root   html;
            index  index.html index.htm;
        }
...
```

​    重载测试,使用不同的ip地址访问192.168.99.5

2.通过不同用户ID测试灰度发布

修改php页面内容

三、网站限流限速

​    编写nginx配置文件

```shell
#全局限速与局部限速
http {
...
limit_rate 100k;    #全局限速,速度限制100k上下浮动
server {
    listen 80;
    server_name localhost;
    limit_rate 200k;    #虚拟主机局部限速,优先级高于全局限速
```

```shell
#定义用户访问不同内容时速度不一样
http {
...
server {
...
    listen 80;
...
    location /file_a {      #用户file_a目录下的内容限速300k
        limit_rate 300k;
    }
    location /file_b {      #用户访问file_b目录下的内容不限速
        limit_rate 0k;
    }
...
#创建对应的测试目录,拷贝对应的测试文件
```

```shell
#修改用户访问连接限制,客户同时打开多个连接并行下载也无法突破限制
http {
...
    #全局限速,速度限制100k,最大100k的速度传输数据
    limit_rate 100k;
    #limit_conn_zone连接限制,控制连接数,$binary_remote_addr是nginx的内置变量,获取客户的地址,ip存储到addr文件中,空间为10m
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    server {
        listen 80;
    ...
    location /file_a {
        #用户file_a目录下的内容限速300k
        limit_rate 300k;
        #file_a目录下的文件只能下载一个,开多个页面不能下载
        limit_conn addr 1;
    }
...
```

​    制作一个大文件做测试,填充0到html/bigfile.img文件,大小100M,填充一次

```shell
dd if=/dev/zero of=html/test.img bs=100M count=1
```

​    重载测试使用wget命令

```shell
wget 192.168.99.5/bigfile.img
```

四、Nginx实现跨域访问

> 网站脚本调用不同端口、域名、协议的数据时被浏览器阻拦。或者说浏览器根据同源策略,会拦截非本网站端口、域名、协议的数据,前端开发编写网页功能,通过配置Nginx跨域指令即可解决
>
> 比如:#没有实现跨域
>
> ​        99.5:80(访问)——>99.5:80(返回结果)
>
> ​        99.5:8800(访问)——>99.5:8080(返回结果)
>
> ​            #实现跨域
>
> ​        99.5:80(访问)——>99.5:8080(返回结果)

​    编写nginx配置文件

```shell
server {
    listen 8080;
    #服务器响应数据中添加允许跨域访问,*代表任意访问源
    #add_header 'Access-Control-Allow-Origin' '*';
    #修改具体允许请求的地址,增加安全
    add_header 'Access-Control-Allow-Origin' 'http://192.168.99.5';
    root html;
    index index.html;
}
server {
listen 80;
...
```

​    重载,测试访问目标ip默认80端口的html,结果返回8080端口的html文件

> 跨域访问测试html文件

```html
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>API-test</title>
    <script>
        var xhr = new XMLHttpRequest();
        xhr.open('GET', 'http://192.168.99.5:8080/api.html',true);
        xhr.send();
        function change(){
            if(xhr.readyState==4 && xhr.status==200){
                alert(xhr.responseText);
            }
        }
    </script>
</head>
<body>
<input  id="button" type="button" value="测试" οnclick="change();">
</body>
```

rpm-build安装、VPN功能、frp连接Linux和windows系统实现内网穿透

#6 号晚上安装java的JDK并部署tomcat服务,配置Maven仓库并定位了阿里云镜像地址

```shell
版本信息:
    java-1.8.0-openjdk
    apache-tomcat-8.0.30    #/usr/local/tomcat
    apache-maven-3.6.3        #/usr/local/maven
配置文件目录: /usr/local/maven/conf/settings.xml
#第159行
<mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>*</mirrorOf>
    <name>nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
#!!!注意 .m2的tar包解压后一定要放在root下,因为maven库默认在root下,如果移动
```

一、rpm-build安装

rpm-build功能:代替手动源码安装步骤(配置、编译、安装)

```shell
#例子使用nginx-1.22.1版本的源码软件,生成对应的RPM包软件
#    软件名称为nginx
#    软件版本为1.22.1
#    RPM软件包可以查询描述信息
#    RPM软件包可以安装及卸载
```

安装rpm-build软件包

```shell
yum -y install  rpm-build
```

自动生成rpmbuild目录结构,位于/root/rpmbuild

​    #SOURCES存放源码包的位置

​    #RPMS存放制作好的rpm位置

​    #SPECS存放制作软件包配置文件的位置

将nginx源码软件复制到SOURCES目录

```shell
cp /root/lnmp_soft/nginx-1.22.1.tar.gz /root/rpmbuild/SOURCES/
```

创建并修改SPEC配置文件,文件名任意,以.spec结尾

```shell
vim /root/rpmbuild/SPECS/nginx.spec
```

nginx.spec配置文件内容:

```shell
Name:nginx                                 #源码包软件名称
Version:1.22.1                             #源码包软件的版本号
Release:1                                  #制作nginx的RPM包版本号
Summary:nginx is a web server              #RPM软件的概述
#Group:                                    #组,目前不需要,直接注释或者删除
License:GPL                                #License授权协议,GPL自由软件
URL:www.test.com                           #网址,自行定义
Source0:nginx-1.22.1.tar.gz                #源码包文件的全称

#BuildRequires:
#制作RPM时安装的软件包gcc,make,pcre-devel,openssl-devel等,即构建依赖,不用写,直接注释,在这只是提示作用,还是需要自己安装
Requires:pcre-devel openssl-devel       #rpm包制作好之后,安装RPM时的依赖关系
%description
nginx is a web server                   #软件的详细描述

%post                                    #rpm包安装后执行的命令
useradd nginx

%prep
%setup -q                               #自动解压源码包,并cd进入目录

%build
./configure --user=nginx                #配置
make %{?_smp_mflags}

%install
%make_install

%files
%doc
/usr/local/nginx/*                      #对哪些文件与目录打包

%changelog
```

rpmbuild创建RPM软件包

```shell
rpmbuild -ba /root/rpmbuild/SPECS/nginx.spec
```

验证:

​    查看目录下是否存在nginx安装包

​    /root/rpmbuild/RPMS/x86_64/nginx-1.22.1-1.x86_64.rpm

​    停止nginx服务并删除nginx文件

​    使用yum -y install /root/rpmbuild/RPMS/x86_64/nginx-1.22.1-1.x86_64.rpm

二、VPN功能

通过wireguard-tools实现主机之间的VPN功能

检查当前主机内核:uname    -r

服务端操作:

​    安装VPN软件:yum -y install /root/vpn/linux/*.rpm

​    在vpn/linux目录下制作密钥:wg genkey | tee private.key | wg pubkey > public.key

​    #生成私钥存入private.key,再利用私钥生成公钥存入public.key

​    生成服务端配置文件

```
vim /etc/wireguard/Linux_Server_VPN.conf
```

​    修改配置文件:

```shell
[Interface]  #服务端配置
PrivateKey = mJ5rYtzBv2QBmwEBtx0RU0NYqxu3Vo+W7DzoPv8H4G4=  #服务器的私钥
Address = 20.20.20.1/8      #VPN内部使用的IP和掩码
ListenPort = 25535          #WireGuard服务监听的端口,可以随便更改

[Peer]       #对端(客户端)配置
PublicKey = ROo6TSEohVh9oCHiMSQ+bXQgqczU+4E1NzeqBqHnuiM=   #客户端的公钥
AllowedIPs = 20.20.20.2/32  #允许哪些客户端访问VPN服务器
```

​    启动服务:wg-quick    up    Linux_Server_VPN    #VPN配置文件名

客户端操作:

​    安装VPN软件:yum -y install /root/vpn/linux/*.rpm

​    在vpn/linux目录下制作密钥:wg genkey | tee private.key | wg pubkey > public.key

​    生成服务端配置文件

```shell
vim /etc/wireguard/Linux_Client_VPN.conf
```

​    修改配置文件:

```shell
[Interface]
PrivateKey = cAq23lRiQtH5iwsnttbFgVJEswcobidNZVy+9IVkPlI= #客户端生成的私钥
Address = 10.10.10.2/8         #VPN客户端的IP和掩码
DNS = 8.8.8.8                  #VPN客户端的DNS

[Peer]  #对端,需要连接的服务器
PublicKey = pV1Jl0Vy2+jaxiNQ49RnuCQ0tg+1vxT+AEqsKUwvKXI=  #服务器生成的公钥
Endpoint = 192.168.88.5:25535  #VPN服务器的公网IP地址和端口
AllowedIPs = 10.0.0.0/8        #哪些流量经过vpn传递
```

​    启动服务:wg-quick    up    Linux_Client_VPN    #VPN配置文件名

测试:服务端ping客户端

Windows操作系统:

把wireguard.msi软件共享给windows,ftp、nfs、scp、http等等方法共享注意权限

<img src="image-20240903181104981.png" style="zoom: 67%;" />

<img src="image-20240903185249442.png" style="zoom: 80%;" />

<img src="image-20240903185725762.png" style="zoom: 67%;" />

windows搭建http服务:

<img src="image-20240903182830749.png" style="zoom:50%;" />

<img src="image-20240903182909884.png" style="zoom:50%;" />

windows网站目录:"C:\inetpub\wwwroot"

三、frp连接Linux和windows系统实现内网穿透

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值