Azure 云服务上 WebRole 的自定义端口号
Custom port number for a WebRole on Azure Cloud Service
我有一个运行良好的现有云服务。它使用 2 个端点(http 80 和 https 443)
我正在尝试在端口 4443 上添加一个新端点,但它不可访问,当我尝试通过此端口访问我的网站时收到 ERR_CONNECTION_TIMED_OUT。
这里是 csdef :
<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="MyService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2015-04.2.6">
<WebRole name="MyWebRole" vmsize="Small">
<Sites>
<Site name="Web">
<Bindings>
<Binding name="httpsN" endpointName="httpsN" />
<Binding name="httpsIn" endpointName="httpsIn" />
<Binding name="httpIn" endpointName="http" />
</Bindings>
</Site>
</Sites>
<Endpoints>
<InputEndpoint name="httpsN" protocol="https" port="4443" certificate="myCert" />
<InputEndpoint name="httpsIn" protocol="https" port="443" certificate="myCert" />
<InputEndpoint name="http" protocol="http" port="80" />
</Endpoints>
<Certificates>
<Certificate name="myCert" storeLocation="LocalMachine" storeName="My" />
</Certificates>
</WebRole>
</ServiceDefinition>
注意:您可以定义多个端点,它们是 HTTP、HTTPS、UDP 和 TCP 端点的组合。您可以指定为输入端点选择的任何端口号,但为服务中的每个角色指定的端口号必须是唯一的。例如,如果您指定 Web 角色将端口 80 用于 HTTP,将端口 443 用于 HTTPS,则您可以指定第二个 Web 角色将端口 8080 用于 HTTP,将端口 8043 用于 HTTPS。
您的配置是正确的。您现在必须确保在您的 Web 角色中确实有东西在该端口上侦听。
这是进入我的 Web 角色的远程桌面会话,请注意 LISTENING
状态。
PS> netstat -an | select-string '443'
TCP 0.0.0.0:443 0.0.0.0:0 LISTENING
TCP 0.0.0.0:4443 0.0.0.0:0 LISTENING
我用 PowerShell 伪造了两个监听器:
$listener1 = [System.Net.Sockets.TcpListener]4443
$listener1.Start();
$listener2 = [System.Net.Sockets.TcpListener]443
$listener2.Start();
nmap
扫描自网络:
$ nmap -vvv -p 4443,443,80 multiendpointwebrole.cloudapp.net -Pn
Starting Nmap 6.47 ( http://nmap.org )
...
PORT STATE SERVICE
80/tcp open http
443/tcp open https
4443/tcp open pharos
所有三个侦听器均可访问。
和 .csdef
:
...
<Bindings>
<Binding name="Binding1" endpointName="Endpoint1" />
<Binding name="Binding2" endpointName="Endpoint2" />
<Binding name="Binding3" endpointName="Endpoint3" />
</Bindings>
...
<Endpoints>
<InputEndpoint name="Endpoint1" protocol="http" port="80" />
<InputEndpoint name="Endpoint2" protocol="tcp" port="4443" />
<InputEndpoint name="Endpoint3" protocol="tcp" port="443" />
</Endpoints>
...
已针对两个端口和适当的证书使用 protocol="https"
进行了测试,
$ curl -kIi https://multiendpointwebrole.cloudapp.net/
HTTP/2 403
content-length: 1233
content-type: text/html
server: Microsoft-IIS/10.0
x-powered-by: ASP.NET
date: Tue, 30 Jan 2018 20:13:27 GMT
$ curl -kIi https://multiendpointwebrole.cloudapp.net:4443/
HTTP/2 403
content-length: 1233
content-type: text/html
server: Microsoft-IIS/10.0
x-powered-by: ASP.NET
date: Tue, 30 Jan 2018 20:13:43 GMT
// Ignore the 403, i had no index page.
嘿,来自 Windows Server 2016 的免费 HTTP/2 支持!微软真好。
我有一个运行良好的现有云服务。它使用 2 个端点(http 80 和 https 443)
我正在尝试在端口 4443 上添加一个新端点,但它不可访问,当我尝试通过此端口访问我的网站时收到 ERR_CONNECTION_TIMED_OUT。
这里是 csdef :
<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="MyService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2015-04.2.6">
<WebRole name="MyWebRole" vmsize="Small">
<Sites>
<Site name="Web">
<Bindings>
<Binding name="httpsN" endpointName="httpsN" />
<Binding name="httpsIn" endpointName="httpsIn" />
<Binding name="httpIn" endpointName="http" />
</Bindings>
</Site>
</Sites>
<Endpoints>
<InputEndpoint name="httpsN" protocol="https" port="4443" certificate="myCert" />
<InputEndpoint name="httpsIn" protocol="https" port="443" certificate="myCert" />
<InputEndpoint name="http" protocol="http" port="80" />
</Endpoints>
<Certificates>
<Certificate name="myCert" storeLocation="LocalMachine" storeName="My" />
</Certificates>
</WebRole>
</ServiceDefinition>
注意:您可以定义多个端点,它们是 HTTP、HTTPS、UDP 和 TCP 端点的组合。您可以指定为输入端点选择的任何端口号,但为服务中的每个角色指定的端口号必须是唯一的。例如,如果您指定 Web 角色将端口 80 用于 HTTP,将端口 443 用于 HTTPS,则您可以指定第二个 Web 角色将端口 8080 用于 HTTP,将端口 8043 用于 HTTPS。
您的配置是正确的。您现在必须确保在您的 Web 角色中确实有东西在该端口上侦听。
这是进入我的 Web 角色的远程桌面会话,请注意 LISTENING
状态。
PS> netstat -an | select-string '443'
TCP 0.0.0.0:443 0.0.0.0:0 LISTENING
TCP 0.0.0.0:4443 0.0.0.0:0 LISTENING
我用 PowerShell 伪造了两个监听器:
$listener1 = [System.Net.Sockets.TcpListener]4443
$listener1.Start();
$listener2 = [System.Net.Sockets.TcpListener]443
$listener2.Start();
nmap
扫描自网络:
$ nmap -vvv -p 4443,443,80 multiendpointwebrole.cloudapp.net -Pn
Starting Nmap 6.47 ( http://nmap.org )
...
PORT STATE SERVICE
80/tcp open http
443/tcp open https
4443/tcp open pharos
所有三个侦听器均可访问。
和 .csdef
:
...
<Bindings>
<Binding name="Binding1" endpointName="Endpoint1" />
<Binding name="Binding2" endpointName="Endpoint2" />
<Binding name="Binding3" endpointName="Endpoint3" />
</Bindings>
...
<Endpoints>
<InputEndpoint name="Endpoint1" protocol="http" port="80" />
<InputEndpoint name="Endpoint2" protocol="tcp" port="4443" />
<InputEndpoint name="Endpoint3" protocol="tcp" port="443" />
</Endpoints>
...
已针对两个端口和适当的证书使用 protocol="https"
进行了测试,
$ curl -kIi https://multiendpointwebrole.cloudapp.net/
HTTP/2 403
content-length: 1233
content-type: text/html
server: Microsoft-IIS/10.0
x-powered-by: ASP.NET
date: Tue, 30 Jan 2018 20:13:27 GMT
$ curl -kIi https://multiendpointwebrole.cloudapp.net:4443/
HTTP/2 403
content-length: 1233
content-type: text/html
server: Microsoft-IIS/10.0
x-powered-by: ASP.NET
date: Tue, 30 Jan 2018 20:13:43 GMT
// Ignore the 403, i had no index page.
嘿,来自 Windows Server 2016 的免费 HTTP/2 支持!微软真好。