windows服务器nginx配置 使用proxy_pass windows server2008 配置vue与python后端 端口放行

Posted YunusQ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了windows服务器nginx配置 使用proxy_pass windows server2008 配置vue与python后端 端口放行相关的知识,希望对你有一定的参考价值。

windows服务器nginx配置 使用proxy_pass windows server2008 配置vue与python后端 端口放行

vue配置 使用nginx

官网下载nginx 放置在D盘或其他盘中 使用nginx1.18.0版本

进入conf目录配置nginx.conf文件

这里使用nginx的proxy_pass 代理
在nginx中配置proxy_pass代理转发时,如果在proxy_pass后面的url加/,表示绝对根路径;如果没有/,表示相对路径,把匹配的路径部分也给代理走。

假设下面四种情况分别用 http://192.168.1.1/proxy/test.html 进行访问。

第一种:
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

我这里使用的/api方式 对应下方vue配置中的env.js

端口设置

我起了两个端口 80端口对应相应的页面 8082端口对应管理端 80端口映射到公网ip 8082对应私网访问

 server 
        listen       80;
        server_name  localhost1;

	location / 
            root   html;
            index  index.html index.htm;
        

        location /api/ 
            proxy_pass   http://127.0.0.1:5001/; //你的后端端口号
        
    

    server 
        listen       8082;
        server_name  localhost2;

	location / 
            root   admin;
            index  index.html index.htm;
        

        location /api/ 
            proxy_pass   http://127.0.0.1:5001/; //你的后端端口号
        
    

vue配置 对应nginx中proxy_pass设置的/api

env.js 配置proxy_pass

/**
 * 配置编译环境和线上环境之间的切换
 *
 * baseUrl: 域名地址
 * routerMode: 路由模式
 * baseImgPath: 图片存放地址
 *
 */
let baseUrl = '';
let routerMode = 'hash';
let baseImgPath;

if (process.env.NODE_ENV === 'development') 
	baseUrl = 'http://127.0.0.1:5001';
else
    baseUrl = '/api';


export 
	baseUrl,
	routerMode,
	baseImgPath

对应使用 fetch.js

import  baseUrl  from './env'

export default async(url = '', data = , type = 'GET', method = 'fetch') => 
    type = type.toUpperCase();
    url = baseUrl + url;
    console.log(url);
    console.log(data);
    if (type === 'GET'||type === 'DELETE') 
        let dataStr = ''; //数据拼接字符串
        Object.keys(data).forEach(key => 
            dataStr += key + '=' + data[key] + '&';
        );
        if (dataStr !== '') 
            dataStr = dataStr.substr(0, dataStr.lastIndexOf('&'));
            url = url + '?' + dataStr;
        
        console.log('url'+url);
    
    // 对于支持fetch方法的浏览器,处理如下:
    if (window.fetch && method === 'fetch') 
        // console.log('fetch');
        let requestConfig;
        requestConfig = 
            // credentials: 'include',
            method: type,
            headers: 
                'Accept': 'application/json',
                'Content-Type': 'application/json',
            ,
            mode: "cors",
            cache: "no-cache"
        ;

        if (type === 'POST'||type==='PUT') 
            Object.defineProperty(requestConfig, 'body', 
                value: JSON.stringify(data)
            )
        
        try 
            const response = await fetch(url, requestConfig);
            const responseJson = await response.json();
            return responseJson
         catch (error) 
            throw new Error(error)
        
    
    // 对于不支持fetch的浏览器,便自动使用 ajax + promise
    else 
        console.log('not fetch');
        return new Promise((resolve, reject) => 
            let requestObj;
            if (window.XMLHttpRequest) 
                requestObj = new XMLHttpRequest();
             else 
                // requestObj = new ActiveXObject;
            

            let sendData = '';
            if (type === 'POST'||type==='PUT') 
                sendData = JSON.stringify(data);
            

            requestObj.open(type, url, true);
            requestObj.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            requestObj.send(sendData);

            requestObj.onreadystatechange = () => 
                if (requestObj.readyState === 4) 
                    if (requestObj.status === 200||requestObj.status === 14) 
                        let obj = requestObj.response;
                        if (typeof obj !== 'object') 
                            obj = JSON.parse(obj);
                        
                        resolve(obj)
                     else 
                        reject(requestObj)
                    
                
            
        )
    

python后端编写与部署

逻辑编写这里不再复述 可以看我python后端的相关文章
由于windows服务器python不能像linux一样一直在后端运行,所以我这边直接命令行运行着了(稍有不妥)

python xxx.py

使用此命令运行即可

服务器端口放行

最后是要把windows的服务器 入站规则加上你nginx配置的端口 我这里是80端口和8082端口
如图加入入站规则 新建规则加入即可

以上是关于windows服务器nginx配置 使用proxy_pass windows server2008 配置vue与python后端 端口放行的主要内容,如果未能解决你的问题,请参考以下文章

nginx 配置nodejs后台代理

Nginx配置proxy_pass转发的/路径问题

NGINX 配置中的 proxy_pass 选项有啥作用?

nginx配置正向代理

Nginx代理proxy pass配置去除前缀

nginx Proxy 配置