2017-04-25 5 views
53

Cloud9.io ubuntu VM Online IDEの環境として使用しています。 Webpack dev serverでアプリを実行するだけでエラーが発生します。Cloudbox.ioのWebpack開発サーバーでReactアプリケーションを実行しているときに「無効なホストヘッダー」メッセージが表示される

私はそれを起動します。

webpack-dev-server -d --watch --history-api-fallback --host $IP --port $PORT 

$ IPは $ PORTポート番号を持つホストアドレスを持つ変数です。

クラウド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のサーバーがあります私のホスト設定のためにこれを返す。 webpack-dev-server/lib/Server.js行60から。https://github.com/webpack/webpack-dev-server

私の質問は、このチェックに正しく合格するように設定する方法です。どんな助けでも大歓迎です。

+0

問題がコメント範囲外にあるようです。 – elmeister

+0

問題がどのように起こっているのか分かりません。あなたは私を正しい方向に向けることができますか? –

答えて

42

devServerのpublicプロパティをリクエストのホスト値に設定する必要があることがわかりました。それがその外部アドレスに表示されます。

だから私は別の解決策は、CLI上でそれを使用している私のwebpack.config.jsに

devServer: { 
    compress: true, 
    public: 'store-client-nestroia1.c9users.io' // That solved it 
} 

を、これを必要に応じて:

のWebPACK-devのサーバー--public $ C9_HOSTNAME < - のためのVAR Cloud9外部IPは

+1

今日もこの問題が発生しました。投稿していただきありがとうございます! – JohnnyQ

+4

また、今日もこの問題に対処しました。 'webpack-dev-server'は最近、この変更に正しいホストヘッダを必要としていたようです。詳細については、https://github.com/webpack/webpack-dev-server/releases/tag/v2.4.3を参照してください。 – Kaitrono

+1

この変更はwebpack-dev-server 1.16.4にも影響します。詳細はhttps://medium.com/webpack/webpack-dev-server-middleware-security-issues-1489d950874aをご覧ください。 –

119

私はWebPACKの-devのサーバー2.4.4 beacuseホストチェックを追加し、これを解決

devServer: { 

    compress: true, 

    disableHostCheck: true, // That solved it 

}  
+3

これも私のために解決しました...ありがとう – John

+6

これはセキュリティ上の問題です。許可されたホスト名を指定する代わりに、publicオプションを使用します。詳細については、https://medium.com/webpack/webpack-dev-server-middleware-security-issues-1489d950874aをご覧ください。 – SystemParadox

+1

公開オプションだけでは機能しません... disableHostCheckはそれを解決する唯一のものです: – davidkomer

2

編集node_modules/webpack-dev-server/lib/Server.jsライン425 更新行を

return true; 
0

としてあなたはC9に作成反応するアプリを使用している場合は、単に

npm run start --public $C9_HOSTNAME 

を開始し、何でもあなたのホスト名からアプリにアクセスするには、このコマンドを実行します端末に$C_HOSTNAMEと入力してホスト名を取得してください。

関連する問題