2013-06-14 1 views
0

Я установил приложение node.js для запуска на рабочих ролях (а не на веб-роли) в облачных сервисах Azure. Все работало нормально со стандартным приложением, работающим по протоколу HTTP.Настройка конечных точек SSL для рабочих ролей node.js на Azure

Теперь я пытаюсь запустить его через SSL на HTTPS и успешно выполнил инструкции по адресу http://www.windowsazure.com/en-us/develop/nodejs/common-tasks/enable-ssl-worker-role/, но он не дал правильных результатов!

Теперь при доступе к URL-адресу через HTTP или HTTPS соединение истекает, и ничего не возвращается.

Есть ли что-нибудь, что я могу потерять или какие-либо шаги, которые не указаны в руководстве, приведенном выше?

Одна вещь, которую я заметил в руководстве, было ли линии ...

<InputEndpoint name="HttpIn" protocol="tcp" port="443" /> 

... на самом деле должно быть HttpsВ вместо этого? Хотя изменение этого не похоже на огромную разницу.


Обновление: вот некоторые из моих файлов конфигурации

ServiceConfiguration.cloud.cscfg

<?xml version="1.0" encoding="utf-8"?> 
<ServiceConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" serviceName="*removed*" osFamily="2" osVersion="*" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration"> 
    <Role name="WorkerRole1"> 
    <ConfigurationSettings /> 
    <Instances count="1" /> 
    <Certificates> 
     <Certificate name="certificateName" thumbprint="*removed*" thumbprintAlgorithm="sha1" /> 
    </Certificates> 
    </Role> 
</ServiceConfiguration> 

ServiceDefinition.csdef

<?xml version="1.0" encoding="utf-8"?> 
<ServiceDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="*removed*" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition"> 
    <WorkerRole name="WorkerRole1" vmsize="ExtraSmall"> 
    <Startup> 
     <Task commandLine="setup_worker.cmd &gt; log.txt" executionContext="elevated"> 
     <Environment> 
      <Variable name="EMULATED"> 
      <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" /> 
      </Variable> 
      <Variable name="RUNTIMEID" value="node" /> 
      <Variable name="RUNTIMEURL" value="http://az413943.vo.msecnd.net/node/0.8.4.exe" /> 
     </Environment> 
     </Task> 
     <Task commandLine="node.cmd .\startup.js" executionContext="elevated" /> 
    </Startup> 
    <Endpoints> 
     <InputEndpoint name="HttpIn" protocol="http" port="80" /> 
     <InputEndpoint name="HttpsIn" protocol="https" port="443" certificate="certificateName" /> 
    </Endpoints> 
    <Certificates> 
     <Certificate name="certificateName" storeLocation="LocalMachine" storeName="My" /> 
    </Certificates> 
    <Runtime> 
     <Environment> 
     <Variable name="PORT"> 
      <RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/Endpoints/Endpoint[@name='HttpIn']/@port" /> 
     </Variable> 
     <Variable name="EMULATED"> 
      <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" /> 
     </Variable> 
     </Environment> 
     <EntryPoint> 
     <ProgramEntryPoint commandLine="node.cmd .\server.js" setReadyOnProcessStart="true" /> 
     </EntryPoint> 
    </Runtime> 
    </WorkerRole> 
</ServiceDefinition> 

Я также пробовал различные вариации на них (с меньшим количеством дополнительных тегов и атрибутов), и ничего не работает.

+0

Атрибут 'name' - это просто имя. Атрибуты 'protocol' и' port' являются важными, и они настроены правильно в соответствии с вашей цитированной конфигурацией и документацией. Чтобы помочь вам, вам нужно вставить в свой вопрос файлы '.csdef' и' .cscfg' для вашего облачного сервиса. Возможно, вы изменили что-то еще. Указания, которые вы приводите, являются правильными и точными. – astaykov

+0

Спасибо за разъяснения по именам. Я обновил сообщение с некоторыми файлами конфигурации. Первоначально я ничего не изменил, но поскольку он не работал, я попытался добавить несколько лишних бит (ни один из них не помог, казалось бы), пока это не будет видно выше. –

ответ

0

Предоставленные значениями являются HttpIn и HttpsIn. Вы должны использовать только эти значения для ролей в ASP.NET Web! Когда вы запускаете сторонние веб-серверы на рабочих ролях, вы должны только использовать tcp как значение для атрибут !! это самый простой способ сделать вещи неработоспособными! Не могли бы вы переключить их обратно на tcp, удалить атрибут certificate из конечной точки Https и повторить попытку?

Также пример приложения server.js по умолчанию используется только для одного порта. Который передается значением среды PORT, определенным для задачи запуска. Там вы должны ссылаться на конечную точку HttpsIn, если хотите трафик HTTPS. К сожалению, я не знаю, сможет ли node.js обрабатывать трафик http и https с помощью этой простой настройки.

UPDATE

Пожалуйста, используйте следующий .csconfig файл (заменить содержимое всех .csconfig файлов вы видите в папке с содержанием я обеспечиваю):

<?xml version="1.0" encoding="utf-8"?> 
<ServiceDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="*removed*" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition"> 
    <WorkerRole name="WorkerRole1" vmsize="ExtraSmall"> 
    <Startup> 
     <Task commandLine="setup_worker.cmd &gt; log.txt" executionContext="elevated"> 
     <Environment> 
      <Variable name="EMULATED"> 
      <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" /> 
      </Variable> 
      <Variable name="RUNTIMEID" value="node" /> 
      <Variable name="RUNTIMEURL" value="http://az413943.vo.msecnd.net/node/0.8.4.exe" /> 
     </Environment> 
     </Task> 
     <Task commandLine="node.cmd .\startup.js" executionContext="elevated" /> 
    </Startup> 
    <Endpoints> 
     <InputEndpoint name="HttpsIn" protocol="https" port="443" /> 
    </Endpoints> 
    <Certificates> 
     <Certificate name="certificateName" storeLocation="LocalMachine" storeName="My" /> 
    </Certificates> 
    <Runtime> 
     <Environment> 
     <Variable name="PORT"> 
      <RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/Endpoints/Endpoint[@name='HttpsIn']/@port" /> 
     </Variable> 
     <Variable name="EMULATED"> 
      <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" /> 
     </Variable> 
     </Environment> 
     <EntryPoint> 
     <ProgramEntryPoint commandLine="node.cmd .\server.js" setReadyOnProcessStart="true" /> 
     </EntryPoint> 
    </Runtime> 
    </WorkerRole> 
</ServiceDefinition> 

Также, пожалуйста, укажите код в вашем файле server.js - по крайней мере, первые 10 строк, где выполняется привязка.А также после изменения, пожалуйста, выполните следующую команду и скажите нам, что является результатом:

с:> телнет [your_cloud_service] .cloudapp.net 443

А также, пожалуйста, убедитесь, что вы иметь файл .pfx в папке, где выполняются команды powershell.

+0

Итак, мой раздел конечных точек теперь просто '' снова, но, к сожалению, у меня такая же проблема, когда время соединения при попытке доступа через https или http. Любые другие предложения? –

+0

Спасибо! Кажется, все работает сейчас. Я не уверен, что это зафиксировало; У меня был файл .pfx в папке WorkerRole1, поэтому он также скопировал его в родительскую папку, и я изменил атрибут имени в этой строке, как вы сказали выше. ' –