python在nginx和apache反向代理、负载均衡的配置解析

在配置nginx作为反向代理和负载均衡,同时配置python脚本接收文件上传参数的情况下,可以在nginx.conf文件新增一个server。具体操作和步骤如下

一,配置nginx作为反向代理和负载均衡

参考 nginx反向代理、负载均衡、限流配置详解;搭配apache或tomcat环境搭建详解-CSDN博客

二,配置python flask 应用以接收上传文件参数

nginx配置示例

假设有多个需要运行Python Flask应用的后端服务器,可以在nginx这样配置

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
    }
 
    server {
        listen 80;
 
        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

Python Flask 应用示例

Python Flask应用可以使用Flaskrequests库来处理上传文件和转发请求:

from flask import Flask, request, redirect, url_for
from werkzeug.utils import secure_filename
import requests
 
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = '/path/to/the/uploads'
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024
 
@app.route('/upload', methods=['POST'])
def upload_file():
    if 'file' not in request.files:
        return redirect(request.url)
 
    file = request.files['file']
    if file.filename == '':
        return redirect(request.url)
 
    if file:
        filename = secure_filename(file.filename)
        file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
 
        # Forward the file to the backend
        url = "http://backend-service-url"
        files = {'file': (filename, open(os.path.join(app.config['UPLOAD_FOLDER'], filename), 'rb'), 'application/octet-stream')}
        response = requests.post(url, files=files)
 
        return response.text
 
if __name__ == "__main__":
    app.run(host='0.0.0.0', port=5000)

在这个Python Flask应用中,它会接收文件上传,保存到指定目录,并转发文件到后端服务。确保后端服务URL是可以处理文件上传的内部服务地址。

以上代码仅为示例,请根据实际环境和需求进行相应的调整。

三,配置同时使用如php,python,ruby等应用开发程序

nginx.conf文件

在其他应用upstream后添加 

#代理转发地址 py
     upstream py{   
            server 127.0.0.1:8080 weight=5;
            #server 127.0.0.1:8080 weight=5; #若存在多个服务器使用py应用程序 自行填写

            keepalive 16;
     }

在文件末尾解开include server/* 注释

include servers/*;

在vhost.conf文件

添加

#py 模块
server {

    listen   80;

    root /root/www/py;

    index index.py index.html;

    server_name local.py.com;

    location / {

        if (!-e $request_filename) {

            rewrite ^/(.*)$ /index.py/$1 last;

        }

    }

  

    location ~ /index\.py {

        proxy_pass_header Server;

        proxy_set_header Host $http_host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Scheme $scheme;

        proxy_pass http://py;

    }

}

文件目录地址自行修改

四,修改hosts

一般位置在/etc 使用命令如下

sudo vim hosts

在文件中添加

127.0.0.1       local.py.com

命令刷新生效

sudo killall -HUP mDNSResponder

五,在apache配置文件中添加

httpd.conf

LoadModule wsgi_module modules/mod_wsgi.so
 
<VirtualHost *:8080>
    ServerName example.com
    DocumentRoot /path/to/your/python/app
 
    WSGIDaemonProcess myapp python-path=/path/to/your/python/app
    WSGIProcessGroup myapp
 
    WSGIScriptAlias / /path/to/your/python/app/wsgi.py
 
    <Directory /path/to/your/python/app>
        Require all granted
    </Directory>
 
    # 静态文件目录
    Alias /static/ /path/to/your/python/app/static/
    <Directory /path/to/your/python/app/static>
        Require all granted
    </Directory>
</VirtualHost>

注,可以根据实际情况选择使用wsgi 或者 uwsgi 

两者区别和用法可参考

nginx反向代理、负载均衡、限流配置详解;搭配apache或tomcat环境搭建详解-CSDN博客

fcgi 、 wsgi 、 uwsgi 区别用法

httpd-vhost.conf

#py
<VirtualHost *:8080>
    ServerName local.py.com:8080
    DocumentRoot "/Users/your_addr/www/py"
    <Directory "/Users/your_addr/www/py">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

重启nginx和apache 后即可

六、java同上原理

http {
    upstream java_api {
        server backend1.example.com;
        server backend2.example.com;
    }
 
    server {
        listen 80;
 
        location / {
            proxy_pass http://java_api;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

步骤同python

其他参数配置参考

nginx反向代理、负载均衡、限流配置详解;搭配apache或tomcat环境搭建详解-CSDN博客

### 对Nginx负载均衡反向代理执行压力测试 对于已经配置Nginx作为负载均衡反向代理的情况,可以采用多种方式来进行压力测试以评估其性能。下面介绍几种常用的压力测试工具及其使用方法。 #### Apache Bench (ab) Apache Bench 是一个简单的命令行HTTP请求生成器,适合于基本的Web服务器性能分析。通过指定并发线程数量以及总的请求数量来模拟多用户的访问情况[^1]。 ```bash ab -n 1000 -c 10 http://20.0.0.23/ ``` 这条命令表示发送总共1000次请求给目标URL `http://20.0.0.23/` ,每次并行发起10个连接。 #### JMeter JMeter是一款功能强大的开源软件,专为加载测试而设计,能够用于各种协议服务的应用程序。它不仅限于HTTP服务,还支持FTP、数据库等其他类型的接口。利用图形界面创建复杂的场景,并能记录详细的统计信息以便后续分析[^2]。 安装完成后,在JMeter中新建一个测试计划,添加HTTP请求采样器指向要测试的服务地址(例如:`http://20.0.0.23/index.jsp`),再加入监听器查看结果数据。 #### Locust Locust是一个分布式的用户级负载生成框架,允许编写Python脚本来描述用户行为模式。这使得它可以非常灵活地模仿真实世界的流量状况。启动多个worker节点可实现大规模并发测试[^3]。 首先需要准备locustfile.py文件定义任务逻辑: ```python from locust import HttpUser, TaskSet, task, between class UserBehavior(TaskSet): @task(1) def index(self): self.client.get("/index.jsp") class WebsiteUser(HttpUser): tasks = [UserBehavior] wait_time = between(1, 5) ``` 运行时只需输入如下指令即可开始施加负载: ```bash locust -f locustfile.py --host=http://20.0.0.23 ``` 以上三种工具各有特点,可以根据具体需求选择合适的方式对Nginx所管理的服务进行压测。值得注意的是,在实际操作前应当确保有足够的资源可供消耗,并做好充分的风险预案措施以免影响线上业务正常运作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值