我正在部署一个应用程序,其中使用 React 前端创建create-react-app,并使用 Rails API 作为后端。我对配置网络服务器和代理不太了解,所以我不确定如何让它在生产中工作。我正在将应用程序部署到 Amazon EC2 实例上的 Ubuntu。Nginx 是网络服务器。我需要配置它,以便 Nginx 提供目录中的静态文件client/build,然后发送任何请求/api到端口 3001 上运行的 Rails 应用程序。现在 Nginx 正在提供 index.html 并且 Javascript 运行正常,但请求/api是没有去正确的地方。关于如何配置 Nginx 来做到这一点有什么想法吗?这是我的/etc/nginx/sites-enabled/default文件:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name mydomain.com;
passenger_enabled on;
rails_env staging;
root /home/ubuntu/app-name/current/client/build;
index index.html;
location /api {
proxy_pass http://127.0.0.1:3001;
}
}
Run Code Online (Sandbox Code Playgroud)
我缺少什么?如何让 Rails 应用程序在端口 3001 上运行并使所有请求都发送到/api该端口?我需要server在此配置中使用单独的块吗?
当没有防火墙时,标准的getUrlContent工作正常.但是当我尝试在防火墙后面进行操作时,我得到了例外.
我试过在AVD管理器中设置"http代理服务器",但它没有用.知道如何正确设置吗?
和btw:来自android文档"你可以使用-verbose-proxy选项来诊断代理连接问题." -verbose-proxy根本不是一个有效的选项.
protected static synchronized String getUrlContent(String url) throws ApiException {
if(url.equals("try")){
return "thanks";
}
if (sUserAgent == null) {
throw new ApiException("User-Agent string must be prepared");
}
// Create client and set our specific user-agent string
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(url);
request.setHeader("User-Agent", sUserAgent);
try {
HttpResponse response = client.execute(request);
// Check if server response is valid
StatusLine status = response.getStatusLine();
if (status.getStatusCode() != HTTP_STATUS_OK) {
throw new ApiException("Invalid response from server: " …Run Code Online (Sandbox Code Playgroud) 我正在wget尝试从网上抓一些东西,但我不想跟随页面的一部分.我以为我可以设置一个代理,删除我不想处理的网页部分,然后再将其返回给wget,但我不确定如何实现这一点.
是否有代理可以让我轻松修改python或node.js中的http响应?
我正在尝试创建一个能够处理HTTPS网站的转发代理.我正在尝试观察和修改不同站点的流量.这是我的代码,适用于http网站,但不适用于https网站.
httpProxy.createServer(function(req, res, next) {
//custom logic
next();
}, function(req, res) {
var proxy = new httpProxy.RoutingProxy();
var buffer = httpProxy.buffer(req);
var urlObj = url.parse(req.url);
req.headers.host = urlObj.host;
req.url = urlObj.path;
console.log(urlObj.protocol);
setTimeout(function() {
proxy.proxyRequest(req, res, {
host: urlObj.host,
port: 80,
buffer: buffer,
}
)}, 5000);
}).listen(9000, function() {
console.log("Waiting for requests...");
});
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
我requests在我的脚本中使用模块,我想了解方法中的proxies参数get().这个答案已经发布了以下代码来说明proxies参数的用法:
http_proxy = "10.10.1.10:3128"
https_proxy = "10.10.1.11:1080"
ftp_proxy = "10.10.1.10:3128"
proxyDict = {"http":http_proxy, "https":https_proxy, "ftp":ftp_proxy }
r = requests.get(url, headers=headers, proxies=proxyDict)
Run Code Online (Sandbox Code Playgroud)
这是我的问题:
为什么我们传递多个代理get()?怎么get()用它们?它一个接一个地尝试吗?
有代理人说,a.b.c.d:port我怎么知道它的协议类型?当您从hidemyass.com购买高级代理时,它ip:port仅以格式发送代理,并且不发送协议类型.那么我应该传递给requests.get()方法呢?
我有这些疑虑,因为我对代理一般都不太了解,以及它们是如何工作的.如果有人解释这一点,那将会很棒.
有没有办法只允许使用 Webpack Dev Server 代理 POST 请求?我的应用程序将 /login 用于 GET 请求,不幸的是,无论 HTTP 方法如何,它都被代理到我的其他主机。
// Serve the Relay app
const compiler = webpack(config);
appServer = new WebpackDevServer(compiler, {
contentBase: '/public/',
proxy: {
'/login': `http://localhost:${GRAPHQL_PORT}`, // only for POST?
},
publicPath: '/js/',
stats: {
colors: true,
chunks: false,
},
historyApiFallback: true
});
Run Code Online (Sandbox Code Playgroud) 我想要一个能够打开 chrome 浏览器并能够通过代理打开 url 的解决方案。
我决定使用以下内容:
Selenium WebDriver 3.0.1 与 Java 1.8.0_111-b14
chromedriver.exe 2.25
我面临一个奇怪的问题:
“只允许本地连接。”
请看我的代码:
package seleniumFiles;
import java.util.Arrays;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.*;
import org.openqa.selenium.remote.DesiredCapabilities;
public class SeleniumClass {
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver", "C:\\work\\selenium-java-3.0.1\\chromedriver.exe");
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability("network.proxy.http", "93.180.7.246");
capabilities.setCapability("network.proxy.http_port", "8080");
capabilities.setCapability("webdriver.chrome.args", Arrays.asList("--verbose --whitelisted-ips=''"));
WebDriver driver = new ChromeDriver(capabilities);
driver.get("http://www.whoishostingthis.com/tools/user-agent/");
}
}
Run Code Online (Sandbox Code Playgroud)
在cmd中运行“chromedriver.exe --verbose --whitelisted-ips=''” sais“白名单允许远程连接<''>”这似乎有效,但我无法弄清楚我在代码中做错了什么.
任何想法或建议表示赞赏。
java google-chrome http-proxy selenium-chromedriver selenium-webdriver
我想通过 http-proxy 代理 websockets,我可以记录接收数据,但是我无法从代理获取发送数据。我能怎么做 ?
#!/usr/bin/env node
var wstarget = 'ws://localhost:8080/?r='+(Date.now() / 1000 | 0);
var httpProxy = require('http-proxy');
var http = require('http');
var proxy = httpProxy.createProxyServer({});
proxy.on('open', function (proxySocket) {
proxySocket.on('data', function (data) {
//console.log('\n'+data);
console.log('',data); // Just log the receive data! Can't get the Send data?
});
});
var server = http.createServer();
server.on('upgrade', function (req, socket, head) {
console.log("Proxying websocket connection to "+wstarget);
proxy.ws(req, socket, head, {
target: wstarget,
changeOrigin: true,
ws: true});
}); …Run Code Online (Sandbox Code Playgroud) 全部,
我正在尝试创建一个简单的代理,它将所有请求逐字转发到另一台服务器。为此,我使用“http-proxy”npm。我正在尝试从本地服务器转到云服务器。起初,当我设置 http 代理时,我看到一个错误“无法验证第一个证书”。经过在线研究后,我发现这可能与我拥有自签名证书有关。因为它是自签名的,所以它不在证书存储中,因此无法进行验证。但是,因为我在开发过程中不需要这个,所以我添加了“secure: false”来忽略证书验证。我知道这对于生产来说是不安全的,但我现在只是想解决这个问题。这次更新实际上解决了这个错误。
现在,我收到另一个错误“UNABLE_TO_VERIFY_LEAF_SIGNATURE”。
任何人都可以帮我弄清楚如何消除这个错误吗?我尝试添加以下内容: process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0'
但这仍然显示错误。我在 http 代理发出的事件中看到错误(有关此事件,请参阅下面的代码)。如果我深入了解“proxyRes”,我可以在 proxyRes -> 连接 -> 授权错误 -> UNABLE_TO_VERIFY_LEAF_SIGNATURE 中看到此错误
下面是我的代码:
'use strict'
require('dotenv').config({silent: true})
var util = require('util');
const loggerFactory = require('./utils/logger')
const express = require('express')
const defaultRouter = require('./routes/default')
var logger = loggerFactory.consoleLogger
const proxy = require('http-proxy');
module.exports = (config) => {
const app = express()
// app.use(loggerFactory.requestLogger())
app.set('json spaces', 2)
app.set('port', config.express.port)
app.use('', defaultRouter)
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0'
var apiProxy = proxy.createProxyServer({});
var proxyUrl = process.env.HOMEINSPECTIONSERVER_URL;
app.use((req,res,next) …Run Code Online (Sandbox Code Playgroud) 我正在使用 node-http-proxy 库来创建转发代理服务器。我最终计划使用一些中间件来动态修改 html 代码。这是我的代理服务器代码的样子
var httpProxy = require('http-proxy')
httpProxy.createServer(function(req, res, proxy) {
var urlObj = url.parse(req.url);
console.log("actually proxying requests")
req.headers.host = urlObj.host;
req.url = urlObj.path;
proxy.proxyRequest(req, res, {
host : urlObj.host,
port : 80,
enable : { xforward: true }
});
}).listen(9000, function () {
console.log("Waiting for requests...");
});
Run Code Online (Sandbox Code Playgroud)
现在我修改 chrome 的代理设置,并启用 web 代理服务器地址为 localhost:9000
但是,每次我访问一个普通的 http 网站时,我的服务器都会崩溃说 "Error: Must provide a proper URL as target"
我是 nodejs 的新手,我不完全明白我在这里做错了什么?
我正在尝试使用路由器表创建一个NodeJS http代理.我看到一些使用http-proxy的例子并尝试这样:
var httpProxy = require('http-proxy');
var proxyTable = {};
proxyTable['testproxy.com/toto'] = 'google.com:80';
proxyTable['testproxy.com/tata'] = 'gmail.com:80';
var httpOptions = {
router: proxyTable
};
console.log('Proxy Server Listening on port 80');
console.log('Requests to textproxy.com/toto (on port 80) are redirected to google.com:80');
console.log('Requests to textproxy.com/tata (on port 80) are redirected to gmail.com:80');
httpProxy.createServer(httpOptions).listen(80);
Run Code Online (Sandbox Code Playgroud)
仅供参考:testproxy.com参考127.0.0.1.
它似乎工作(它只拦截testproxy.com/toto和tata的请求),但当我尝试:
curl http://testproxy.com/toto
Run Code Online (Sandbox Code Playgroud)
我有一个NodeJS错误:
var proxyReq = (options.target.protocol === 'https:' ? https : http).reque
^
TypeError: Cannot read property 'protocol' of undefined
at Array.stream [as 3] (D:\workspace\Proxy W_S\node_modules\http-proxy\l
ib\http-proxy\passes\web-incoming.js:103:35) …Run Code Online (Sandbox Code Playgroud)