我在Docker中有2个容器:
Nginx正确地代理了对节点容器的请求,我可以在http://localhost:8080处访问节点应用程序,但是由于某些原因,还有其他类型为http://localhost:3000/sockjs-node/info?t=1570780621084的轮询请求失败了(net :: ERR_CONNECTION_REFUSED),因为仅在主机上端口8080上的Nginx可见。我认为这些轮询请求应定向到Nginx(http://localhost:8080/sockjs-node/info?t=1570780621084),但我不知道我必须在Webpack devserver配置上进行哪些更改以解决此问题。
这是Web Pack devserver配置:
const path = require("path");
const webpack = require("webpack");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const { CleanWebpackPlugin } = require("clean-webpack-plugin");
const {
BUILD_DIR,
} = require("./config/config");
module.exports = {
entry: {
bundle: [
"@babel/polyfill",
"./src/app.js",
]
},
output: {
path: BUILD_DIR,
filename: "[name].[hash].js"
},
devtool: "inline-source-map",
devServer: {
host: "localhost",
port: 3000,
contentBase: BUILD_DIR,
historyApiFallback: false,
hot: true,
inline: true,
watchOptions: {
poll: true
},
disableHostCheck: true,
},
module: {
rules: [
{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
use: {
loader: "babel-loader"
}
},
{
test: /\.css$/,
use: ["style-loader", "css-loader"],
},
{
test: /\.scss$/,
use: ["style-loader", "css-loader", "sass-loader"]
}
],
},
plugins: [
new CleanWebpackPlugin(),
new HtmlWebpackPlugin({
template: "src/index.html",
filename: "index.html",
inject: true
}),
]
};
这是Nginx配置:
upstream reactclient {
server react-client:3000 fail_timeout=20s max_fails=10;
}
server {
listen 80;
location / {
proxy_pass http://reactclient;
}
location /sockjs-node/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://reactclient;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
到目前为止,我一直试图在devserver配置的条目中添加以下内容,但是id无效。
entry: {
bundle: [
`webpack-dev-server/client?http://localhost:8080`,
"webpack/hot/dev-server",
"@babel/polyfill",
"./src/app.js",
]
},
如何使Webpack devserver在Docker中与Nginx正常工作?
假设dev-server
在端口3000上运行,而nginx在端口8080上运行,这对我有用(请参阅web-devserver public option):
Nginx default.conf
upstream reactclient {
server react_client:3000 fail_timeout=20s max_fails=100;
}
server {
listen 80;
location / {
proxy_pass http://reactclient;
}
location /sockjs-node/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://reactclient;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Webpack
// [...]
devServer: {
host: '0.0.0.0',
port: 3000,
public: `localhost:8080`,
historyApiFallback: false,
hot: true,
inline: true,
watchOptions: {
aggregateTimeout: 300,
poll: 1000,
ignored: /node_modules/,
},
disableHostCheck: true,
},
// [...]