我正在尝试通过 traefik 作为反向代理访问经过docker化的 neo4j 实例的Web界面。
我可以通过导航到myDomain.demo:7479/browser
来访问neo4j-instance的Web界面。但是,我希望能够仅通过导航到myDomain.demo/neo4j/myNeo
来达到此目的,因此在同一台计算机上使用多个neo4j实例时,我不必记住端口号。
遗憾的是,我无法以这种方式访问网络界面,而是显示了一个空白页面,该页面要求我提供凭据。我猜这至少是一个好兆头,因为通常在访问Web界面时,我必须将db凭据输入到GUI掩码中才能连接到neo4j-db。但是,它看起来应该像this,而不是我看到的简单的浏览器弹出窗口。
Cleary我不能成为第一个尝试在反向代理后面访问多个neo4j实例及其对应的Web界面的人,但是我不能全神贯注于如何做到这一点。这是我的设置命令:
Dockerized Traefik代理
docker run --name proxy -p 80:80 -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock \
traefik \
--api --loglevel=debug --entryPoints="Name:http Address::80" \
--docker --docker.endpoint="unix://var/run/docker.sock"
Dockerized Neo4j实例(无需代理即可正常运行)
docker run --name myNeo -d --publish=7479:7474 --publish=7701:7687 \
--label traefik.frontend.rule="Host:myDomain.demo;Path:/neo4j/myNeo" \
--label traefik.backend=myNeo \
--label traefik.port=7474 \
neo4j:latest
(为简单起见,我在neo4j-docker命令中删除了多个卷分配。)
我注意到,手动导航到myDomain.demo:7479
时,我被重定向到myDomain.demo:7479/browser
。也许Traefic无法处理该重定向,这就是为什么为我提供没有错误的空白页的原因?
谢谢。
答案 0 :(得分:1)
三件事:
const styles = theme => ({
root: {
width: '100%',
marginTop: theme.spacing.unit * 3
},
table: {},
tableWrapper: {
overflowX: 'auto'
}
});
规则仅是完全匹配。 <Paper className={classes.root}>
<EnhancedTableToolbar
numSelected={selected.length}
tableTitle={'Accounts'}
>
<AccountFilterList />
</EnhancedTableToolbar>
<div className={classes.tableWrapper}>
<Table className={classes.table} aria-labelledby='tableTitle'>
<EnhancedTableHead
numSelected={selected.length}
order={order}
orderBy={orderBy}
onSelectAllClick={this.handleSelectAllClick}
onRequestSort={this.handleRequestSort}
rowCount={data.length}
columnData={columnData}
/>
<TableBody>
{data
.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)
.map(n => {
const isSelected = this.isSelected(n.ref);
return (
<TableRow
hover
onClick={event => this.handleRowClick(event, n.ref)}
role='checkbox'
aria-checked={isSelected}
tabIndex={-1}
key={n.ref}
selected={isSelected}
>
<TableCell padding='checkbox'>
<Checkbox
checked={isSelected}
onChange={event => this.handleClick(event, n.ref)}
/>
</TableCell>
<TableCell>
<Avatar
alt={n.name}
src={`//logo.clearbit.com/${n.clearBit}`}
onError={e => {
e.target.src =
'https://doxhze3l6s7v9.cloudfront.net/app/static/img/company-default-img.png';
}}
/>
</TableCell>
<TableCell>{n.name}</TableCell>
<TableCell>{n.owner}</TableCell>
<TableCell numeric>{n.dateCreated}</TableCell>
</TableRow>
);
})}
{emptyRows > 0 && (
<TableRow style={{ height: 49 * emptyRows }}>
<TableCell colSpan={6} />
</TableRow>
)}
</TableBody>
</Table>
</div>
<TablePagination
component='div'
count={data.length}
rowsPerPage={rowsPerPage}
page={page}
backIconButtonProps={{
'aria-label': 'Previous Page'
}}
nextIconButtonProps={{
'aria-label': 'Next Page'
}}
onChangePage={this.handleChangePage}
onChangeRowsPerPage={this.handleChangeRowsPerPage}
/>
</Paper>
将匹配Path
,但不匹配Path:/example
。您可能想改用/example
。/example/bacon
,则将无法使用子目录进行路由。您需要配置您的应用程序以侦听子路径。 Neo4j需要知道其路径,以便它可以生成链接等。