गैर-स्थानीय होस्ट अनुरोधों को सुनने के लिए मुझे kestrel वेब सर्वर कैसे मिलेगा?


82

मैंने अपने c #, asp.net 5, mvc 6 ऐप को विंडोज़ 2008 सर्वर पर तैनात किया है। मैंने निकाल दिया है dnx webऔर यह 5000 पोर्ट को सुन रहा है और स्थानीय कंप्यूटर से एक्सेस करने पर ठीक काम करता है।

गैर-स्थानीय होस्ट अनुरोध सुनने के लिए मुझे यह कैसे मिलेगा?

PS यह प्रश्न इस का डुप्लिकेट नहीं है ... यह asp.net पूर्व RC1 को संदर्भित करता है जब hosting.ini वास्तव में एक .ini प्रारूप था। अब, यह JSON है और मुझे वास्तव में इसमें क्या होना चाहिए, इस पर कोई दस्तावेज नहीं मिल सकता है।

PPS वास्तविक समाधान गैर-स्वीकृत उत्तर में बड़े पैमाने पर चेतावनी के साथ जुड़े प्रश्न के लिए है। कदम:

  1. लिंक किए गए उत्तर के अनुसार अपना प्रोजेक्ट बदलें।
  2. अपने प्रोजेक्ट को अपने सर्वर पर प्रकाशित करें।
  3. सर्वर पर, ... \ approot \ src \ YourProject फ़ोल्डर पर जाएं और वहां एक कमांड विंडो खोलें।
  4. भागो dnx web- यह विफल हो जाएगा
  5. Daud dnu restore
  6. भागो 'dnu build`
  7. रन 'dnx web` - वेब सर्वर को अब ठीक शुरू होना चाहिए

पीएस इस सवाल को upvoting लोगों के लिए। यह पुराना है। बहुत बुरी तरह से आउटडेटेड!

यह .NET कोर के शुरुआती संस्करणों पर लागू होता है। प्रश्न और उत्तर निश्चित रूप से फ्रेमवर्क के वर्तमान संस्करणों के लिए लागू नहीं हैं (उदाहरण के लिए 2.x, 3.x)



खैर जुड़े प्रश्न में दूसरा जवाब JSON प्रारूप को संदर्भित करता है। यह आपके लिए उपयोगी नहीं है?
च्यू x

@chuex मैंने वह कोशिश की, और शुरू में इसने स्टार्टअप पर वेब सर्वर को क्रैश कर दिया। यकीन नहीं है कि क्यों। तो मैंने किया था dnu restore, जिसके बाद dnu buildऔर फिर dnx webठीक से वेब सर्वर शुरू कर दिया। मुझे नहीं पता कि ऐसा क्यों हो रहा है, लेकिन कम से कम मैं इसे काम करने में सक्षम हूं। निश्चित रूप से एक बग है जिसे अंतिम रिलीज से पहले संबोधित करने की आवश्यकता है। अभी के लिए, यह वर्कअराउंड है।
एंगरहैकर

1
मैंने प्रश्न को हल करने के लिए संपादित किया।
एंगरहैकर

2
मैंने पुराना होने पर बड़े अक्षरों को पढ़ा, लेकिन मुझे .NET कोर 3.1 में एक वेब एपीआई के लिए यहां भी उत्तर की आवश्यकता थी। मैंने पहली बार 0.0.0.0 T000 को बाँधने की कोशिश की थी, लेकिन IPv6 जाहिरा तौर पर यहाँ के आसपास होता है और इसलिए यह काम नहीं करता है। इस बीच :: ::]: 5000 ने बाहरी IPv4 पहुँच के लिए भी काम नहीं किया। मुझे पता नहीं था कि बंधन *: 5000 यहां तक ​​कि एक ऐसी चीज़ थी जो अब हम IPv4 / IPv6 मानक से बाहर निकल रहे हैं। तो बहुत मददगार!
जोनास

जवाबों:


115

Kestrel सर्वर द्वारा उपयोग की जाने वाली डिफ़ॉल्ट कॉन्फ़िगरेशन फ़ाइल है hosting.json। अलग-अलग बीटा संस्करणों में कई बार नाम बदला गया था। यदि आप अब project.jsonनिम्न "command"अनुभाग के साथ उपयोग करते हैं

"commands": {
    "web": "Microsoft.AspNet.Server.Kestrel"
}

तब कमांड लाइन से सर्वर शुरू करने के दौरान

dnx web

फ़ाइल hosting.jsonपढ़ी जाएगी। फ़ाइल

{
    "server.urls": "http://0.0.0.0:5000"
}

प्रत्येक IP4 पते पर 5000 सुनने के लिए सर्वर को कॉन्फ़िगर करेगा। विन्यास

{
    "server.urls": "http://::5000;http://0.0.0.0:5000"
}

IP4 और IP6 पते पर 5000 सुनने के लिए सूचित करेगा।

एक उपयोग ASPNET_ENVपरिवेश चर या --config myconfig1.json(या config=myconfig1.json) के उपयोग से वैकल्पिक कॉन्फ़िगरेशन फ़ाइलों को निर्दिष्ट कर सकता है । उदाहरण के लिए आप उपयोग कर सकते हैं

SET ASPNET_ENV=Development

और hosting.Development.jsonविशिष्ट विन्यास के साथ फाइल बनाने के लिए । वैकल्पिक रूप से आप के project.jsonसाथ उपयोग कर सकते हैं

"commands": {
    "web": "Microsoft.AspNet.Server.Kestrel"
    "webProd": "Microsoft.AspNet.Server.Kestrel --config prod.json"
}

और सर्वर का उपयोग शुरू करें

dnx webProd

मुझे अतिरिक्त रूप से याद दिलाना होगा कि यह आवश्यक हो सकता है कि आप अतिरिक्त सुनने और पंजीकरण करने (शुरू करने dnx web) की अनुमति दें । फ़ायरवॉल और नए टीसीपी / HTTP बंदरगाहों को सुनने की स्थानीय सुरक्षा के कारण इसकी आवश्यकता है। नीचे कुछ ऐसा होना चाहिए जो स्थानीय पंजीकरण और हर किसी के लिए 5000 पोर्ट (IPv4 और IPv6) सुने:

netsh http add iplisten ipaddress=0.0.0.0:5000
netsh http add iplisten ipaddress=::5000
netsh http add urlacl url=http://+:5000/ user=\Everyone

अधिक सुरक्षित होने के लिए आप न्यूनतम अधिकार देने के लिए उपरोक्त कॉन्फ़िगरेशन को समायोजित कर सकते हैं।

अद्यतन: धन्यवाद @BlaneBunderson। किसी भी इंटरफ़ेस से किसी भी IP4 और IP6 पते http://*:5000पर सुनने के लिए IP पते (जैसे ) के बजाय * का उपयोग कर सकते हैं । एक ध्यान से होना चाहिए और इन का उपयोग नहीं करना चाहिए

  • http://*:5000;http://::5000
  • http://::5000;http://*:5000
  • http://*:5000;http://0.0.0.0:5000
  • http://*:5000;http://0.0.0.0:5000

क्योंकि इसे दो बार IP6 एड्रेस ::या IP4 एड्रेस रजिस्टर करना होगा ।0.0.0.0

घोषणा के अनुरूप है

तकनीकी रूप से, कोई भी होस्टनाम जो "लोकलहोस्ट" या एक मान्य IPv4 या IPv6 पता नहीं है, Kestrel को सभी नेटवर्क इंटरफेस से बाँध देगा।

मुझे लगता है कि भविष्य में व्यवहार को बदला जा सकता है। इस प्रकार मैं केवल उपयोग करने की सलाह दूंगा *:5000, 0.0.0.0:5000और ::5000किसी भी आईटी पते के पंजीकरण के लिए फार्म।

अद्यतन 2: ASP.NET कोर RC2 परिवर्तन ( घोषणा देखें ) चूक को लोड करने का व्यवहार। Mainसे hosting.jsonऔर कमांड लाइन के मापदंडों को लोड करने के लिए बदलाव करना होगा। नीचे उपयोग का एक उदाहरण है

public static void Main(string[] args)
{
    var config = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("hosting.json", optional: true)
        .AddEnvironmentVariables(prefix: "ASPNETCORE_")
        .AddCommandLine(args)
        .Build();

    var host = new WebHostBuilder()
        .UseUrls("http://*:1000", "https://*:1234", "http://0.0.0.0:5000")
        .UseEnvironment("Development")
        .UseConfiguration(config)
        .UseKestrel()
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseIISIntegration()
        .UseStartup<Startup>()
        .Build();

    host.Run();
}

उपरोक्त कोड उपयोग तीन बाइंडिंग: "http://*:1000", "https://*:1234", "http://0.0.0.0:5000"डिफ़ॉल्ट रूप से डिफ़ॉल्ट पोर्ट 5000 उपयोग के बजाय डिफ़ॉल्ट रूप से (सटीक के उपयोग होने के लिए http://localhost:5000)। के बाद कॉल किया .UseConfiguration(config)जाता है । इस प्रकार या कमांड लाइन से लोड किया गया कॉन्फ़िगरेशन डिफ़ॉल्ट विकल्पों को अधिलेखित कर देता है। यदि एक हटाने की रेखा तब उसी निर्देशिका से लोड की जाएगी जहां आवेदन dll संकलित किया जाएगा (उदाहरण के लिए )। .UseUrlshosting.json.SetBasePath(Directory.GetCurrentDirectory())hosting.jsonbin\Debug\netcoreapp1.0

जैसे निष्पादन का उपयोग कर सकते हैं

dotnet.exe run --server.urls=http://0.0.0.0:5000

यदि यह मौजूद है तो डिफ़ॉल्ट सेटिंग्स (से UseUrls) और "server.urls"संपत्ति से सेटिंग को अधिलेखित करें hosting.json

उसी तरह से एक पर्यावरण चर सेट करके ULR सेटिंग्स को अधिलेखित कर सकता है

set ASPNETCORE_SERVER.URLS=http://localhost:12541/

तब उपयोग करने वाले एप्लिकेशन की डिफ़ॉल्ट शुरुआत बाध्यकारी के लिए उपयोग dotnet.exe runकरेगी http://localhost:12541/

आप यहां HTTPS बाइंडिंग के उपयोग का एक उदाहरण पा सकते हैं ।

REMARK: वातावरण चर के नाम से बदल दिया गया है ASPNETCORE_SERVER.URLSकरने के लिए ASPNETCORE_URLSASP.NET के बाद के संस्करणों में (देखें यहाँ ASP.NET कोर 3.1 के प्रलेखन)।


1
इसके अलावा आप "server.urls" का उपयोग कर सकते हैं: "http: // *: 5000" "server.urls" के बजाय " 0.0.0.0:5000 " (। निजी तौर पर मुझे लगता है कि * थोड़ा और अधिक समझ में आता है)
Blane बुंडर्सन

@BlaneBunderson: आपके सुझाव के लिए धन्यवाद! मैं जोड़ने के लिए है कि राशि http://*:5000के समान ही है http://::5000;http://0.0.0.0:5000और नहीं http://0.0.0.0:5000। यह IPv4 और IPv6 दोनों के लिए सुनने को मजबूर करता है। आप इसे उपयोग करके http://*:5000;http://::5000या सत्यापित कर सकते हैं http://::5000;http://*:5000। एक को दूसरा पता दर्ज करने के दौरान "Microsoft.AspNet.Server.Kestrel.Networking.UvException: Error -4091 EADDRINUSE पता पहले से ही उपयोग में आता है"। कुछ परिदृश्यों में IPv4 और IPv6 दोनों का पंजीकरण अच्छा है, दूसरे परिदृश्य में यह अच्छा नहीं है। किसी भी तरह से इसका उल्लेख करना अच्छा है।
ओलेग

RC2 के लिए उत्कृष्ट अद्यतन, विस्तृत विवरण के लिए धन्यवाद
2233 '12

आपके "अपडेट 2" उदाहरण में .UseStartup<Startup>()ओवरराइड नहीं होगा .UseConfiguration(config)?
nicks

उस पर्यावरण चर में एक टाइपो है, यह ASPNETCORE_URLS होना चाहिए
nrjohnstone

33

RC2 में project.json के कमांड सेक्शन का उपयोग नहीं किया जाता है। मैंने अभी तक Hosting.json को लेने के लिए Kestrel नहीं लिया है, लेकिन आप प्रोग्राम को मुख्य रूप से उस एप्लिकेशन के मेन में पोर्ट सेट कर सकते हैं जहां नया WebHostBuilder बनाया और कॉन्फ़िगर किया गया है। नीचे दिए गए नमूने में बस .UseUrls () विधि जोड़ें

    public static void Main(string[] args)
    {
        var host = new WebHostBuilder()
            .UseUrls("http://0.0.0.0:5000/")
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .Build();

        host.Run();
    }

3
यह एक बड़ी मदद थी। मैंने .UseUrls("http://*:5000")इसके बजाय उपयोग किया, और वर्चुअलबॉक्स पर खाली होस्ट आईपी के साथ पोर्ट 5000 भेजा, और अंत में मैं अपने मैक से डॉक-होस्टेड .NET कोर एंडपॉइंट्स को प्राप्त कर सकता हूं। मिठाई!
मार्क लार्टर

RC2 और अधिक विस्तृत विवरण में hosting.json का उपयोग करने पर जानकारी के लिए, ऊपर ओलेग का जवाब, विशेष रूप से "अपडेट किया गया 2" पढ़ें
Trygve

2
यह भी 1.0.0-पूर्वावलोकन2-003121 पर लागू होता है, डॉकटर छवि
अलंकृत करें

18

यदि आप asp.net core 2.1 + का उपयोग करते हैं, तो appsettings.json में कॉन्फ़िगर करें खंड को संशोधित करें।

"Kestrel": {
  "EndPoints": {
    "Http": {
      "Url": "http://0.0.0.0:5002"
    }
  }
},

मैक के लिए VS कोड या विजुअल स्टूडियो से चलने पर इसने भी लगातार मेरे लिए काम किया है। ASPNETCORE_URLSमेरे लिए काम नहीं किया
JSancho

10

यदि आप एक डॉक कंटेनर (जो गैर-लोकलहोस्ट पते को सुनने की आवश्यकता के लिए मेरा उपयोग मामला था) के अंदर एक ASP.NET कोर एप्लिकेशन डालने की कोशिश कर रहे हैं, तो ध्यान दें कि यह उपयोग मामला पहले ही Microsoft द्वारा आपके लिए एक साथ रखा गया है। आप https://hub.docker.com/r/microsoft/aspnetcore/ पर पूरा गौरव देख सकते हैं

वर्तमान में (v1.0.1) इस समस्या को हल करने के लिए मुख्य जादू यह है कि स्रोत डॉकफेराइल में एक url वातावरण चर सेटिंग है, और अनुप्रयोग इसे ओवरराइड करने का प्रयास नहीं करता है। (वास्तव में, एक कंटेनरीकृत एप्लिकेशन को आंतरिक रूप से जितना संभव हो सके उस पर्यावरण के बारे में जोर देना चाहिए जहां वह चलेगा।)

ENV ASPNETCORE_URLS http://+:80

वहां तारांकन के बजाय प्लस चिह्न पर ध्यान दें। मैं वास्तव में उपरोक्त dockerhub लिंक पर जाने की सलाह देता हूं, जब तक कि मेरा लिंक अच्छा न हो, तब तक मेरे उत्तर को पढ़ें। संस्करण 1.1 बस कोने के आसपास है, और भविष्य में चीजें फिर से बदल सकती हैं।

कंटेनर चलाते समय, अतिथि चर परिवेश के अनुसार, अतिथि पोर्ट 80 को बेनकाब करना सुनिश्चित करें। उदाहरण के लिए:

docker run -d -p 8000:80 myapp
curl localhost:8000

1
यह मेरा उपयोग मामला भी था और लिंक बेहद मददगार थे। धन्यवाद।
ऑक्सीमोरन

3

के लिए AspNetCore 3.1+ सिर्फ फ़ाइल में निम्न पंक्ति जोड़ें appsettings.json:

"Urls": "http://*:80"

1
एक जादू की तरह काम करता है। मुझे नहीं पता कि क्यों समाधान के साथ hosting.jsonकाम नहीं करेगा।
मचाडो

0

वातावरण चर सेट ASPNETCORE_URLSकरने के लिए http://0.0.0.0:5000/

यदि Visual Studio से चल रहा है, तो आप प्रोजेक्ट गुण के डीबग टैब से परिवेश चर जोड़ें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.