Cloud9.io의 Webpack dev 서버에서 React 앱을 실행할 때“잘못된 호스트 헤더”메시지가 나타납니다.
Cloud9.io ubuntu VM Online IDE 환경으로 사용하고 있으며 Webpack dev 서버로 앱을 실행하기 위해이 오류의 문제를 해결하여 줄였습니다.
나는 그것을 시작한다 :
webpack-dev-server -d --watch --history-api-fallback --host $IP --port $PORT
$ IP는 호스트 주소가 $ PORT 인 포트 변수입니다.
Cloud 9에서 앱을 배포 할 때 기본 IP 및 PORT 정보가 있으므로 이러한 변수를 사용하도록 지시 받았습니다.
서버가 부팅되고 코드를 컴파일하는데 아무런 문제가 없지만 인덱스 파일이 표시 되지 않습니다 . 텍스트가 "잘못된 호스트 헤더"인 빈 화면 만.
이것은 요청입니다.
GET / HTTP/1.1
Host: store-client-nestroia1.c9users.io
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
DNT: 1
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: en-US,en;q=0.8
이것은 내 package.json입니다.
{
"name": "workspace",
"version": "0.0.0",
"scripts": {
"dev": "webpack -d --watch",
"server": "webpack-dev-server -d --watch --history-api-fallback --host $IP --port $PORT",
"build": "webpack --config webpack.config.js"
},
"author": "Artur Vieira",
"license": "ISC",
"dependencies": {
"babel-core": "^6.18.2",
"babel-loader": "^6.2.8",
"babel-preset-es2015": "^6.18.0",
"babel-preset-react": "^6.16.0",
"babel-preset-stage-0": "^6.24.1",
"file-loader": "^0.11.1",
"node-fetch": "^1.6.3",
"react": "^15.5.4",
"react-bootstrap": "^0.30.9",
"react-dom": "^15.5.4",
"react-router": "^4.1.1",
"react-router-dom": "^4.1.1",
"url-loader": "^0.5.8",
"webpack": "^2.4.1",
"webpack-dev-server": "^2.4.4",
"whatwg-fetch": "^2.0.3"
}
}
이것은 webpack.config.js입니다.
const path = require('path');
module.exports = {
entry: ['whatwg-fetch', "./app/_app.jsx"], // string | object | array
// Here the application starts executing
// and webpack starts bundling
output: {
// options related to how webpack emits results
path: path.resolve(__dirname, "./public"), // string
// the target directory for all output files
// must be an absolute path (use the Node.js path module)
filename: "bundle.js", // string
// the filename template for entry chunks
publicPath: "/public/", // string
// the url to the output directory resolved relative to the HTML page
},
module: {
// configuration regarding modules
rules: [
// rules for modules (configure loaders, parser options, etc.)
{
test: /\.jsx?$/,
include: [
path.resolve(__dirname, "./app")
],
exclude: [
path.resolve(__dirname, "./node_modules")
],
loader: "babel-loader?presets[]=react,presets[]=es2015,presets[]=stage-0",
// the loader which should be applied, it'll be resolved relative to the context
// -loader suffix is no longer optional in webpack2 for clarity reasons
// see webpack 1 upgrade guide
},
{
test: /\.css$/,
use: [ 'style-loader', 'css-loader' ]
},
{
test: /\.(png|jpg|jpeg|gif|svg|eot|ttf|woff|woff2)$/,
loader: 'url-loader',
options: {
limit: 10000
}
}
]
},
devServer: {
compress: true
}
}
Webpack dev server is returning this because of my host setup. In webpack-dev-server/lib/Server.js line 60. From https://github.com/webpack/webpack-dev-server
My question is how do I setup to correctly pass this check. Any help would be greatly appreciated.
I solved with this,beacuse webpack-dev-server 2.4.4 add host check
devServer: {
compress: true,
disableHostCheck: true, // That solved it
}
EDIT : Please note, this fix is insecure.
Please see the following answer for a secure solution: https://stackoverflow.com/a/43621275/5425585
I found out, that I need to set the public
property of devServer, to my request's host value. Being that it will be displayed at that external address.
So I needed this in my webpack.config.js
devServer: {
compress: true,
public: 'store-client-nestroia1.c9users.io' // That solved it
}
Another solution is using it on the CLI:
webpack-dev-server --public $C9_HOSTNAME <-- var for Cloud9 external IP
This is what worked for me:
Add allowedHosts under devServer in your webpack.config.js:
devServer: {
compress: true,
inline: true,
port: '8080',
allowedHosts: [
'.amazonaws.com'
]
},
I did not need to use the --host or --public params.
Add this config to your webpack config file when using webpack-dev-server (you can still specify the host as 0.0.0.0).
devServer: {
disableHostCheck: true,
host: '0.0.0.0',
port: 3000
}
The more secure option would be to add allowedHosts to your Webpack config like this:
module.exports = {
devServer: {
allowedHosts: [
'host.com',
'subdomain.host.com',
'subdomain2.host.com',
'host2.com'
]
}
};
The array contains all allowed host, you can also specify subdomians. check out more here
If you are using create-react-app on C9 just run this command to start
npm run start --public $C9_HOSTNAME
And access the app from whatever your hostname is (eg type $C_HOSTNAME
in the terminal to get the hostname)
'IT' 카테고리의 다른 글
이름을 기준으로 속성 값을 얻는 방법 (0) | 2020.06.25 |
---|---|
jQuery의 테이블 행 및 열 번호 (0) | 2020.06.25 |
Android : LocationManager 및 Google Play 서비스 (0) | 2020.06.25 |
백그라운드 작업자에게 인수를 보내시겠습니까? (0) | 2020.06.25 |
bash에서 가장 최근의 X 파일을 제외한 모든 파일 삭제 (0) | 2020.06.25 |