【发布时间】:2016-05-27 18:10:57
【问题描述】:
我正在尝试做一个相对简单的设置:
- 具有 HTML 虚拟主机的 Apache 服务器。
- Webpack 和 Webpack Dev Server 用于资产重新加载和生成。
为此,Webpack Dev Server proxies 另一个服务器传递它不知道如何处理的请求。
使用基本的 python 服务器(有效):
- 在http://localhost:5000 上启动python 网络服务器。
- 运行 npm start。
- Webpack Dev Server 使用 http://localhost:9090 启动和代理 python 服务器。
- 访问 http://localhost:9090 并查看 python 服务器和 Webpack 资产的 HTML 结果。
使用 Apache 服务器:
- 启动 Apache 服务器。
- 运行 npm start。
- Webpack 开发服务器使用http://localhost:9090 启动并代理 Apache 服务器。
- 访问 localhost:9090 浏览器会自动重定向到http://localhost 并显示“It works!”。
如果我在浏览器中单独访问http://vhost.name,我会看到正确的 HTML。我的环境是默认的 Apache 服务器版本:Mac OSX El Capitan 上的 Apache/2.4.16 (Unix)。
package.json
"scripts": {
"test": "node server.js",
"start": "npm run start-dev-server",
"start-dev-server": "webpack-dev-server 'webpack-dev-server/client?/' --host 0.0.0.0 --port 9090 --progress --colors",
"build": "webpack"
},
webpack.config.js
/*global require module __dirname*/
var webpack = require('webpack');
module.exports = {
entry: {
app: [
'webpack-dev-server/client?http://localhost:9090',
'webpack/hot/only-dev-server',
'./src/app.js'
]
},
output: {
path: __dirname + '/dist',
filename: '[name]_bundle.js',
publicPath: 'http://localhost:9090/dist'
},
devServer: {
historyApiFallback: true,
proxy: {
// Python server: works as expected at localhost:9090
// '*': 'http://localhost:5000'
// Apache virtual host: redirects to localhost instead of
// serving localhost:9090
'*': 'http://vhost.name'
}
},
plugins: [
new webpack.HotModuleReplacementPlugin()
]
};
httpd-vhosts.conf
<VirtualHost vhost.name:80>
DocumentRoot "/Path/To/vhost.name"
ServerName vhost.name
<Directory "/Path/To/vhost.name">
Options FollowSymLinks Indexes MultiViews
AllowOverride All
# OSX 10.10 / Apache 2.4
Require all granted
</Directory>
</VirtualHost>
主机
127.0.0.1 localhost
127.0.0.1 vhost.name
【问题讨论】:
-
我的计算机上安装了 browser-sync,如果我运行 browser-sync start --proxy vhost.name 并访问 localhost:3000 则它工作正常。扯掉我的头发……
-
在 Chrome 工具或 Charles 流量代理中观察网络流量,vhost.name:9090 正在执行 301 永久移动,然后浏览器将其解释为尝试没有端口的 localhost。根据此评论 (serverfault.com/a/361324) “在您的 Apache 配置中查找两件事;重定向和具有 R 标志的 RewriteRule 指令。如果这些指令不存在,则 Apache 没有进行重定向”。虚拟主机实际上指向具有以下标准重写规则的 Wordpress 站点:
-
RewriteBase / RewriteRule 上的 RewriteEngine ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule 。 /index.php [L] -
仍在寻找,但隔离了问题(我认为)。我在一个单独的 Apache VHost 上有一个基本的 PHP 页面,它按预期工作。在上面的示例中,我从 Wordpress 提供服务,因此看起来这是在删除端口。
标签: apache proxy virtualhost webpack-dev-server