IISExpress trả về lỗi 503 từ các máy từ xa


183

Tôi đang cố kiểm tra một trang web tôi đang chạy trong một phiên bản IISExpress cục bộ với một số máy / thiết bị khác trên mạng cục bộ của tôi. Tôi đang chạy Win7 Pro.

Khi tôi lần đầu tiên cố gắng duyệt đến máy của mình từ một máy khác trong phân khúc mạng cục bộ, tôi gặp lỗi 400: Tên máy chủ không hợp lệ.

Tôi hiểu rằng tôi cần cấp quyền truy cập từ xa vào ACL bằng một lệnh trên dấu nhắc lệnh nâng cao như:

netsh http add urlacl url=http://mymachinename:50333/ user=everyone

Bây giờ tôi nhận được một dịch vụ 503 là không có lỗi.

Tường lửa Windows hiện đang tắt và tôi có thể duyệt qua phiên bản IISExpress cục bộ của mình với địa chỉ http://localhost:50333

Mảnh ghép cuối cùng của câu đố cấu hình này là gì?


1
Điều gì xảy ra nếu bạn duyệt http://mymachinename:50333/ từ máy tính của bạn ?
Đại tá Panic

1
Vấn đề đã được giải quyết. Xem câu trả lời được chấp nhận từ vikomall
Jeff Fritz

1
Thảo luận sâu hơn về vấn đề này tại đây: hanselman.com/blog/ Kẻ
Chris Moschini

3
Bạn có thể cài đặt miễn phí VS mở rộng của chúng tôi 'Băng tải' để có được xung quanh vấn đề này marketplace.visualstudio.com/...
Jim W nói Khôi phục Monica

Câu trả lời:


270

Có vẻ như bạn đang thiếu một mục thông tin ràng buộc trong tệp applicationationhost.config.

  1. Mở tập tin applicationationhost.config của bạn. Các địa điểm có thể là:

    • %userprofile%\Documents\IISExpress\config\applicationhost.config
    • $(solutionDir)\.vs\config\applicationhost.config (VS2015)
    • Không, kiểm tra đầu ra từ iisexpress.exeđể chắc chắn.
  2. Xác định vị trí mục WebSite của bạn và thêm ràng buộc sau với tên máy của bạn.

         <binding protocol="http" bindingInformation=":50333:your-machine-name" />
    
  3. Khởi động lại IIS Express


9
Đừng bận tâm. Visual Studio đã tạo một mục cấu hình trùng lặp cho mục này. Tôi loại bỏ nó và nó hoạt động.
nuzzolilo

3
IIS Express không luôn sử dụng tệp cấu hình tại đường dẫn đó. Đọc đầu ra từ một iisexpress.execách cẩn thận để xem tập tin cấu hình nào nó đang sử dụng.
Đại tá Panic

5
Mục điểm chính 3, khởi động lại IIS Express! Xác định vị trí biểu tượng trong khay hệ thống của bạn và dừng biểu tượng đó để buộc nó khởi động lại. Không chắc chắn nếu có một cách thanh lịch hơn. Nhưng điều này làm việc cho tôi. Cảm ơn!
Thượng nghị sĩ

9
Nếu bạn quá lười biếng để thêm mọi kết hợp tên máy chủ / ipaddress, hãy sử dụng dấu * thay vì "tên máy của bạn"
StarQuake

4
Thêm một gợi ý: Nếu bạn nhấp chuột phải vào biểu tượng systray của IISExpress, bạn có thể chọn "Hiển thị tất cả các ứng dụng" sẽ mở ra một hộp thoại hiển thị tất cả các ứng dụng bạn đang chạy cục bộ. Nhấp chuột phải vào ứng dụng mong muốn (không nhấp chuột trái hoặc nó sẽ mở trình duyệt), sau đó bạn sẽ thấy "Đường dẫn" và "Cấu hình" bên dưới. Nhấp chuột trái vào "Cấu hình" và nó sẽ mở ra tệp Applicationhost.config có liên quan nơi bạn cần thêm / chỉnh sửa các liên kết như được mô tả ở trên. Đó là một cách dễ dàng để xác định vị trí cấu hình hiện tại.
Matt

30

Chỉ có 1 điều làm việc cho tôi.

sử dụng *:portnumber:*là không tốt. Có, sau khi thực hiện điều đó và đảm bảo Tường lửa Windows đã mở, tôi có thể kết nối với cổng, nhưng tôi vẫn gặp lỗi "503".

Tôi đã thử nghiệm một vài thứ cục bộ và phát hiện ra rằng chỉ http: // localhost hoạt động. Sử dụng địa chỉ IP thực (không phải 127.0.0.1, nhưng, ví dụ, 192.168.1.50), vẫn trả về 503 ngay cả trên máy cục bộ. Tôi đã thử sử dụng tên máy chủ thực trong các liên kết, nhưng IIS Express đã từ chối bắt đầu. Điều này thực sự có thể có liên quan đến cách giải quyết tên máy chủ lưu trữ. Tôi đã không khám phá điều đó hơn nữa.

Cuối cùng, tôi đã kết thúc bằng cách sử dụng cấu hình này:

<binding protocol="http" bindingInformation="*:53351:localhost" />
<binding protocol="http" bindingInformation="192.168.1.50:53351:*" />

Bằng cách đó, tôi có thể kết nối từ một máy từ xa bằng cách sử dụng http://192.168.1.50:53351.


Tôi đã gặp lỗi chính xác này, nhưng không muốn mã hóa IP hiện tại vào cấu hình, vì nó có thể thay đổi. Tôi tìm thấy ký tự đại diện hoạt động trên các phần IP và tên máy chủ, vì vậy tôi đã kết thúc với: <binding protocol="https" bindingInformation="*:44300:*" /> <binding protocol="http" bindingInformation="*:8888:*" /> chỉnh sửa: thực sự đã cố gắng để hiểu đánh dấu SO, tôi bỏ :).
Brian Barker

19

Sau khi lãng phí hơn 3h cho một chủ đề đầy đủ như vậy, tôi quyết định chia sẻ thiết lập của mình với bạn. Cấu hình của tôi là Visual Express 2012 cho bản cập nhật Web 4 trên windows 8. Đây là lần đầu tiên tôi trở lại MS VS kể từ khi nghiên cứu (ít nhất 8 năm) và bây giờ tôi chắc chắn rằng quy tắc linux. Trên django, kiểu thiết lập này khiến tôi mất 10 phút tìm kiếm tài liệu.

  1. tắt tường lửa để kiểm tra

    netsh advfirewall set allprofiles state off
    
  2. thiết lập liên kết trong trường hợp địa chỉ cục bộ của tôi là localIP = 192.168.1.102 (vì các liên kết không thể chứa tên miền không có chữ số, sử dụng nó bên dưới thay vì mylocaldomain.com, xem chính sách stackoverflow) trong Documents\IISExpress\config\applicationhost.config

    <bindings>
        <binding protocol="http" bindingInformation="*:53351:mylocaldomain.com" />
        <binding protocol="http" bindingInformation="*:53351:localhost" />
    </bindings>
    
  3. tự động thêm tự động cho dịch vụ bắt đầu ISS Express

    <site name="NeuronCharts" id="2" serverAutoStart="true">
    
  4. Thêm một số quy tắc kỳ lạ vào máy chủ http (Tôi vẫn không biết liệu đây có phải là không)

    netsh http add urlacl url=http://mylocaldomain.com:53351/ user=everyone
    
  5. chạy IISExpress thủ công không phải từ VS IDE

  6. bạn sẽ thấy ISSE े đang đăng ký các ràng buộc
  7. chạy trình duyệt http://mylocaldomain.com:53351 nếu nó hoạt động thì chúng ta có thể thêm quy tắc tường lửa
  8. thêm quy tắc tường lửa

    netsh advfirewall firewall add rule name="IISExpressWeb" dir=in protocol=tcp localport=53351 remoteip=any action=allow
    

đặt remoteip thành bất kỳ nếu bạn muốn truy cập máy chủ của mình từ thế giới bên ngoài nếu bạn muốn truy cập mạng cục bộ, hãy sử dụng localsubnet

  1. bắt đầu tường lửa

    netsh advfirewall set allprofiles state on
    
  2. kiểm tra lại nếu mọi thứ đang hoạt động trên ip cục bộ và công cộng

Chúc bạn may mắn

Núi cao


3
Điều này khiến IIS Express không còn chạy trên Win8 với VS2013 mà không chạy VS2013 với tư cách Quản trị viên. Điều này gây ra bởi IIS Express hiện đang cố gắng mở lưu lượng truy cập bên ngoài do lệnh Netsh. Tôi cũng không bao giờ có thể thực sự có được nó để phục vụ lưu lượng đó; Tôi sẽ nhận được 503. Để đảo ngược sự cố do lệnh Netsh gây ra trong câu trả lời này, hãy chạy nó từ Dấu nhắc lệnh chạy với tư cách Quản trị viên: netsh http delete urlacl url=http://*:55416/(thay thế cổng bằng cổng của bạn)
Chris Moschini

fwiw - Tôi không cần bước 4 (cuộc gọi Netsh mà @Rafal không chắc chắn là cần thiết) và, mặc dù tôi không cần ràng buộc "localhost" trong bước 2 để chạy các dự án VS2013 trong giải pháp của tôi, phía trước kết thúc tải nhanh hơn đáng kể khi liên kết "localhost" được đặt đúng chỗ.
lukkea

Tôi thấy rằng làm theo các hướng dẫn ở trên vẫn dẫn đến 503 sử dụng localhost. Tôi thấy rằng tên máy khách (Windows) cần có trong các ràng buộc trong applicationhost.configvà trên máy chủ (Mac) tên máy khách cần được ánh xạ 127.0.0.1vào /etc/hosts. Chỉ sau đó, một yêu cầu cho máy khách trên máy chủ thành công.
Matt

Một bổ sung cho bước 5. Sử dụng iothypress.exe / siteid: id trong đó id là giá trị của thuộc tính id của trang web của bạn trong cài đặt <site id = "id">, nếu không, nó sẽ bắt đầu trang web đầu tiên.
Mudit Jain

9

Tìm thấy vấn đề phải làm với một ánh xạ urlacl xấu. Để tìm hiểu điều này:

netsh http show urlacl 

và tìm kiếm những thứ như http://+:80/hoặc cổng mà bạn đang ràng buộc.

Sau đó sử dụng

netsh http delete url=<the url from the list>

Điều này đã khắc phục vấn đề cho tôi.


4
nên được httphl xóa urlacl url = <url từ danh sách>, điều này làm việc cho tôi cảm ơn!
sergiogx

1
Điều này được thảo luận chi tiết hơn trên blog msDN . Đây cuối cùng cũng là vấn đề của tôi.
Kevin Scharnhorst

3
Cảm ơn, cú pháp chính xác lànetsh http delete urlacl <yoururl>
yoel halb

7

Không có gì làm việc cho tôi. Cuối cùng tôi cũng tìm thấy proxy của người đồng tính

Xem câu trả lời của tôi https://stackoverflow.com/a/33623399/631527

Một giải pháp khác là ngrok


Kinh ngạc! Tôi đã thử tất cả các giải pháp khác và chúng cũng không hoạt động. "Yêu cầu xấu" hoặc "Dịch vụ không khả dụng". Quá phức tạp. Tôi đã cài đặt mô-đun nút và chạy nó, nó hoạt động ngay lập tức !!
TetraDev

LÀM! thánh Cảm ơn bạn!
Ayson Baxter

cũng xem ngrok
Bộ công cụ

1
Nó SIMPLY hoạt động như một nét duyên dáng với ngrok! Thật kỳ lạ khi phải định tuyến đầu tiên từ localhost đến iis-proxy và sau đó từ proxy đến ngrok, nhưng hey, đã hoạt động!. Ví dụ, tôi có người chuyển giới của tôi trên cảng 3028. Tôi chạy iisexpress-proxy 3028 to 12345rồi ./ngrok.exe http 12345. 😅
Reuel Ribeiro

@TetraDev, "Yêu cầu xấu" hoặc "Dịch vụ không khả dụng" là do tiêu đề máy chủ nhận được khi truy cập localhost từ ngrok không phải là một localhost như được giải thích ở đây
Dani Torres

3

Điều đã giúp tôi, là nhấp chuột phải vào biểu tượng 'IISExpress', 'Hiển thị tất cả các ứng dụng'. Sau đó chọn trang web và tôi thấy aplicationhost.config sử dụng trang web nào và việc sửa lỗi diễn ra hoàn hảo.

Cấu hình IISExpress


1

Vấn đề là cập nhật tệp applicationationhost.config bên trong thư mục web thay vì giải pháp. Tệp cấu hình giải pháp là một trong những thay đổi


1

Sau giải pháp của @vikomall, đừng quên khởi động VS với tư cách quản trị viên. Điều này sửa nó cho tôi.


0

Về câu trả lời của Anthony Rizzolo: trong Windows 8.1, tôi đã phải gõ như thế này:

netsh http delete urlacl url=<the url from the list>

Ví dụ:

netsh http delete urlacl url=http://+:8689/

0

Không có câu trả lời nào ở trên làm việc cho tôi.

Tôi đã có hai mục trong Netsh cho cùng một dịch vụ

netsh http show urlacl

nhập mô tả hình ảnh ở đây

Một người sử dụng ký tự đại diện mạnh, người còn lại sử dụng ký tự đại diện yếu.

Loại bỏ cái có ký tự đại diện yếu đã thực hiện công việc.

Tìm hiểu thêm về ký tự đại diện mạnh và yếu trong bối cảnh của Netsh

Khi phần tử máy chủ của UrlPrefix bao gồm một dấu cộng duy nhất (+), UrlPrefix khớp với tất cả các tên máy chủ có thể có trong bối cảnh của các phần tử lược đồ, cổng và tương đối của nó và rơi vào loại ký tự đại diện mạnh.

Khi dấu hoa thị (*) xuất hiện dưới dạng phần tử máy chủ, thì UrlPrefix rơi vào danh mục ký tự đại diện yếu. Loại UrlPrefix này khớp với bất kỳ tên máy chủ nào được liên kết với lược đồ, cổng và tương đối đã chỉ định chưa được khớp với UrlPrefix ký tự đại diện mạnh, rõ ràng hoặc ký tự đại diện yếu. Thông số máy chủ này có thể được sử dụng làm công cụ bắt mặc định trong một số trường hợp hoặc có thể được sử dụng để chỉ định một phần lớn không gian tên URL mà không phải sử dụng nhiều UrlPrefixes.

https://docs.microsoft.com/en-gb/windows/desktop/Http/urlprefix-strings

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.