Yêu cầu không hợp lệ - Tên máy chủ IIS7 không hợp lệ


86

Khi tôi cố gắng truy cập ứng dụng web của mình trên cổng 8080, tôi gặp lỗi sau

Yêu cầu không hợp lệ -
Lỗi HTTP tên máy chủ không hợp lệ 400. Tên máy chủ yêu cầu không hợp lệ.

Tôi thậm chí không biết bắt đầu chẩn đoán vấn đề này từ đâu

Câu trả lời:


74

Bạn đã kiểm tra ràng buộc là IIS chưa? (inetmgr.exe) Nó có thể không được đăng ký để chấp nhận tất cả các tên máy chủ trên 8080.

Ví dụ: nếu bạn thiết lập nó cho mysite.com:8080 và nhấn nó tại localhost: 8080, IIS sẽ nhận được yêu cầu nhưng không có ràng buộc tên máy chủ để khớp nên nó từ chối.

Ngoài ra, bạn nên kiểm tra nhật ký IIS (C: \ inetpub \ logs \ wmsvc #) trên máy chủ và xem liệu bạn có thấy yêu cầu của mình hay không. Sau đó, bạn sẽ biết nếu đó là sự cố trên máy khách của bạn hoặc trên chính máy chủ.


2
Trong trường hợp của tôi, tôi phải thêm dòng sau vào C: \ Windows \ System32 \ drivers \ etc \ hosts: "127.0.0.1 localhost"
chris

4
Bạn định cấu hình các ràng buộc trong IIS Manager ở đâu?
Steve Smith

30

FWIW, nếu bạn chỉ muốn cho phép các yêu cầu được chuyển hướng đến bất kỳ tên máy / ip nào thì bạn có thể đặt ràng buộc của mình như sau:

<binding protocol="http" bindingInformation="*:80:*" />

Tôi sử dụng ràng buộc này để tôi có thể tải một máy ảo với IE6 và sau đó gỡ lỗi ứng dụng của mình.


CHỈNH SỬA: Trong khi sử dụng IIS Express để gỡ lỗi, vị trí mặc định cho tệp cấu hình của tùy chọn này là

C:\Users\{User}\Documents\IISExpress\config\applicationhost.config

1
Bạn cũng có thể yêu cầu IIS Express làm việc với các yêu cầu từ xa bằng cách sử dụng Phần mở rộng VS miễn phí của chúng tôi có tên là Conveyor (không liên quan đến thay đổi cấu hình). Sử dụng Tools-> Extensions ... để có được nó, hoặc ít marketplace.visualstudio.com/...
Jim W nói Khôi phục Monica

25

Đây trang của Microsoft mô tả làm thế nào để thiết lập quyền truy cập vào IIS Server Express từ các máy tính khác trên mạng nội bộ.

Tóm lại:

1) từ dấu nhắc lệnh với đặc quyền quản trị viên:

netsh http add urlacl url=http://[your ip address]:8181/ user=everyone

2) Trong Tường lửa của Windows với Bảo mật Nâng cao, hãy tạo quy tắc đến mới cho cổng 8181 để cho phép các kết nối bên ngoài

3) Trong applicationhost.config, trong nút cho dự án của bạn, hãy thêm:

<binding protocol="http" bindingInformation="*:8181:[your ip address]" />

KHÔNG thêm (như đã được đề xuất trong một câu trả lời khác):

<binding protocol="http" bindingInformation="*:8181:*" />

Liên kết ký tự đại diện ở trên đã phá vỡ quyền truy cập của tôi từ http://192.168.1.6:8181/


4
Ngoài ra, bạn phải chạy Visual Studio với đặc quyền quản trị viên, nếu không bạn sẽ không thể liên kết với IIS Express. Khi thử nghiệm thành as Administrator, bạn sẽ cần phải đảo ngược các bước trước đó bằng cách loại bỏ các mục nhập thêm từ file applicationhost.config và loại bỏ các HTTP.sys nhập sử dụng: netsh http delete urlacl url=http://[your ip address]:8181/
SteveC

1
Nếu máy tính của bạn được đặt thành một ngôn ngữ khác, thì "người dùng = mọi người" phải là ngôn ngữ khác. Trong tiếng Pháp là user = "Tout le monde". Xem câu trả lời này: stackoverflow.com/a/18856394/1317559
Yster

24

Vì vậy, tôi đã giải quyết vấn đề này bằng cách truy cập trang web của mình trong Trình quản lý IIS và thay đổi tên máy chủ trong liên kết trang web từ localhost thành *. Bắt đầu làm việc ngay lập tức.

Liên kết trang web trong IIS


hoàn hảo! Làm việc cho một ví dụ AWS sử dụng để chạy một trang web Laravel
Vishnoo Rath

Điều này đã khắc phục sự cố của tôi với lõi asp.net nơi nó hoạt động trên localhost nhưng không phải ip từ xa, cảm ơn!
Philip

Nó đã hoạt động trong trường hợp của tôi. Mặc dù tôi đã lưu trữ hơn 100 trang web. nhầm lần đầu tiên và không thể tìm thấy trong các quy tắc tường lửa hoặc bất kỳ giải pháp nào khác.
Ketan Kotak

9

Đối với Visual Studio 2017Visual Studio 2015, IIS Expresscài đặt được lưu trữ trong .vsthư mục ẩn và đường dẫn như thế này .vs\config\applicationhost.config, thêm ràng buộc như bên dưới sẽ hoạt động

<bindings>
    <binding protocol="http" bindingInformation="*:8802:localhost" />
    <binding protocol="http" bindingInformation="*:8802:127.0.0.1" />
</bindings>

Cú pháp: https://docs.microsoft.com/en-us/dotnet/api/microsoft.web.administration.binding.bindinginformation?view=iis-dotnet


2
Đối với bất kỳ ai sử dụng phương pháp này, tôi không cần lưu ý rằng mẫu Thông tin ràng buộc chính xác là: địa chỉ ip: cổng: tiêu đề máy chủ. Vì vậy, cách triển khai chính xác là: <bindings> <binding protocol="http" bindingInformation="localhost:8802:*" /> <binding protocol="http" bindingInformation="127.0.0.1:8802:*"/> </bindings>
Lionnel Afangbedjee

1
Thư mục .vs là thư mục trong thư mục gốc dự án của bạn. Trong đó applicationhost.config nhìn cho <tên trang web = "[YourService / ProjectName]> thẻ và tìm ra <bindings> thẻ đó.
NexX

4

Đừng quên liên kết với địa chỉ IPv6! Tôi đang cố gắng thêm một trang web trên 127.0.0.1 bằng cách sử dụng localhost và gặp lỗi yêu cầu không hợp lệ / tên máy chủ không hợp lệ. Khi tôi ping localhost, nó giải quyết thành :: 1 vì IPv6 đã được bật nên tôi chỉ cần thêm liên kết bổ sung để khắc phục sự cố.

Các ràng buộc về trang web IIS


4

Điều này đã giải quyết được vấn đề của tôi (xin lỗi vì tiếng Anh kém của tôi):

  1. mở cmd với tư cách quản trị viên và chạy lệnh (Không có dấu ngoặc vuông):
    netsh http add urlacl url=http://[ip adress]:[port]/ user=everyone

  2. trong documents/iisexpress/config/applicationhost.configvà trong thư mục dự án gốc của bạn trong thư mục (ẩn): .vs/config/applicationhost.configbạn cần thêm hàng vào thẻ "site":
    <binding protocol="http" bindingInformation="*:8080:192.xxx.xxx.xxx" />

  3. mở "trình quản lý dịch vụ thông tin internet (iis)"
    (để tìm: trong tìm kiếm trên thanh tác vụ, viết "Bật hoặc tắt các tính năng của Window" và mở kết quả, sau đó đánh dấu vào hộp kiểm "dịch vụ thông tin internet" và cài đặt):

    1. trong màn hình bên trái, nhấp vào: tên máy tính -> Trang web -> Trang web mặc định và
    2. sau đó nhấp vào màn hình bên phải "Ràng buộc"
    3. nhấp vào nút Thêm
    4. viết những gì bạn cần và nhấn "OK".
  4. mở "Tường lửa Windows Với Bảo mật Nâng cao",

    1. trong màn hình bên trái, nhấn "Quy tắc đến" và sau đó
    2. nhấn vào màn hình bên phải "Quy tắc mới ..."
    3. kiểm tra cổng và nhấn Tiếp theo,
    4. kiểm tra TCP và cổng của bạn và nhấn Tiếp theo,
    5. chọn "Cho phép kết nối" và nhấn Tiếp theo,
    6. chọn hộp kiểm tất cả và nhấn Tiếp theo,
    7. viết tên và nhấn Hoàn tất.
  5. làm xong.


3

Tôi không chắc đây có phải là vấn đề của bạn hay không nhưng đối với bất kỳ ai đang cố gắng truy cập ứng dụng web của anh ấy từ máy của anh ấy và gặp sự cố này:

Đảm bảo rằng bạn đang kết nối với 127.0.0.1(hay còn gọi là localhost) chứ không phải với địa chỉ IP bên ngoài của mình.

URL của bạn nên được một cái gì đó giống như http://localhost:8181/hay http://127.0.0.1:8181không http://YourExternalIPaddress:8181/ .


Thông tin bổ sung:
Lý do điều này hoạt động là vì tường lửa của bạn có thể chặn yêu cầu của chính bạn. Nó có thể là một bức tường lửa trên hệ điều hành của bạn và nó có thể là (thông thường) bộ định tuyến của bạn.

Khi bạn kết nối với địa chỉ IP bên ngoài của mình, bạn kết nối với bạn từ internet, như thể bạn là một người lạ (hoặc một tin tặc).
Tuy nhiên, khi bạn kết nối với localhost của mình, bạn kết nối cục bộ với tư cách là chính mình và khối này rõ ràng là không cần thiết (& tránh hoàn toàn).


Tôi gặp sự cố này khi sử dụng localhost hoạt động nhưng khi sử dụng máy địa chỉ IP cục bộ (thì không). Tại sao bạn lại nói cụ thể là không sử dụng địa chỉ của bạn - tại sao điều này không hoạt động - tôi muốn hiểu?
Mã duy nhất

1
Việc "hacker" thay đổi tên máy chủ được sử dụng để kết nối với một trang web là điều vô lý tầm thường.
Arafangion

@Arafangion Thay đổi nó ở đâu và được gì?
MasterMastic

@MasterMastic: Ví dụ: trên linux, hãy chỉnh sửa tệp /etc/hosts.conf. Windows có tương đương. Hoặc đơn giản hơn, chỉ cần cho curl hoặc wget tên máy chủ nào cần báo cáo. Ở đây, dường như bạn đang dựa vào "tên máy chủ" để chặn các yêu cầu từ internet, vì vậy những gì mà hacker thu được rõ ràng là bất cứ thứ gì họ cần đạt được bằng cách bỏ qua cơ chế "bảo vệ" rõ ràng của bạn. IIS dường như vẫn liên kết với cổng. Cách khắc phục chính xác là không liên kết với cổng có thể truy cập bên ngoài ngay từ đầu.
Arafangion

@Arafangion Vâng nhưng đó là chuyển hướng cục bộ. Vấn đề ở đây không phải localhost, đó là những gì nó đang đề cập đến ( 127.0.0.1). Tất cả những gì tôi đang nói là kết nối với nó chứ không phải với IP hiển thị bên ngoài của bạn. Không có sự phụ thuộc vào localhost, nó chỉ được sử dụng như một từ đồng nghĩa. Tôi sẽ chỉnh sửa câu trả lời của mình để làm rõ ràng hơn.
MasterMastic

2

Bạn có thể sử dụng công cụ Visual Studio 2005/2008/2010 CMD. Chạy nó với tư cách quản trị viên và viết

aspnet_regiis -i

Cuối cùng, tôi có thể chạy ứng dụng của mình thành công.


2

Nếu làm việc trên máy chủ cục bộ hoặc bạn chưa có tên miền, hãy xóa trường "Tên Máy chủ:". nhập mô tả hình ảnh ở đây


1

Kiểm tra tệp máy chủ cục bộ của bạn (ví dụ: C: \ Windows \ System32 \ drivers \ etc \ hosts). Trong trường hợp của tôi, trước đây tôi đã sử dụng điều này để trỏ một URL đến hộp dành cho nhà phát triển và sau đó quên mất nó. Sau đó, khi tôi sử dụng lại cùng một URL, tôi vẫn nhận được Yêu cầu sai (Tên máy chủ không hợp lệ) vì lưu lượng truy cập đến sai máy chủ.


1

Tôi gặp lỗi này khi cố gắng gọi một dịch vụ web bằng "localhost". Tôi đã sửa nó bằng cách sử dụng IP thực thay thế (192.168 ...)


Người chiến thắng. Đây là sự cố của tôi trên máy chủ windows 2003.
DreamTeK

0

Tôi đã gặp lỗi tương tự sau khi sử dụng msdeploy để sao chép ứng dụng sang máy chủ mới. Hóa ra các ràng buộc vẫn đang sử dụng địa chỉ IP từ máy chủ trước đó. Vì vậy, hãy kiểm tra kỹ địa chỉ IP trong các ràng buộc IIS. (Có vẻ rõ ràng sau thực tế, nhưng không xảy ra ngay lập tức với tôi để kiểm tra nó).


0

Kiểm tra lại URL chính xác mà bạn đang cung cấp. Tôi đã gặp lỗi này khi bỏ lỡ tiền tố tuyến đường được xác định trong ASP.NET nên nó không biết định tuyến yêu cầu ở đâu.


0

Đảm bảo rằng IIS đang lắng nghe cổng của bạn.

Trong trường hợp của tôi, đây là vấn đề. Vì vậy, tôi đã phải thay đổi cổng của mình thành một cái gì đó khác như 8083 và nó đã giải quyết được vấn đề này.

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.