Thông báo lỗi chi tiết 500, ASP + IIS 7.5


192

IIS 7.5, 2008rc2, asp cổ điển, thông báo lỗi 500:

Trang này không thể được hiển thị vì đã xảy ra lỗi máy chủ nội bộ.

Tôi cần biết cách cấu hình IIS để có lỗi chi tiết hơn.
Tôi đã thử cài đặt thành đúng tất cả các tùy chọn gỡ lỗi trong cấu hình ASP.
Nhưng điều đó đã không làm việc. Ai giúp tôi với?


Tôi đang sử dụng một cách khác nhau để ghi lại lỗi trong tệp văn bản: stackoverflow.com/questions/20475502/ Sự khác biệt chính - thông tin lỗi sẽ được lưu trữ trong tệp văn bản
Zam

Câu trả lời:


231

Tôi đã đến cùng một vấn đề và cố định theo cùng một cách như Alex K .

Vì vậy, nếu "Gửi lỗi đến trình duyệt" không hoạt động, hãy đặt:

Trang lỗi -> 500 -> Chỉnh sửa cài đặt tính năng -> "Lỗi chi tiết"

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

Cũng lưu ý rằng nếu nội dung của trang lỗi được gửi lại khá ngắn và bạn đang sử dụng IE, IE sẽ vui vẻ bỏ qua nội dung hữu ích được gửi lại bởi máy chủ và thay vào đó hiển thị cho bạn trang lỗi chung của chính nó. Bạn có thể tắt tùy chọn này trong các tùy chọn của IE hoặc sử dụng một trình duyệt khác.


9
Nếu nó vẫn không hoạt động, hãy tắt các thông báo lỗi http thân thiện
Tim Partridge

3
Nếu "Trang lỗi" bị thiếu trong bảng điều khiển của bạn, hãy đảm bảo tính năng được bật: Bật hoặc tắt các tính năng của Windows => Dịch vụ WWW, Tính năng HTTP phổ biến, [x] Lỗi HTTP
fiat

1
@fiat Để bật "Trang lỗi", tôi phải đi : Turn Windows features on or off > Internet Information Services > World Wide Web Services > Common HTTP Features > [✓] HTTP Errors.
Jess Telford

Lưu ý: "Trang lỗi""Trang lỗi .NET" là khác nhau. Bạn đặc biệt muốn "Trang lỗi" .
Jess Telford

@JessTelford HOW-TOcho các trang lỗi NET ?
Kiquenet

94

Nếu bạn đang ở trên một máy chủ từ xa, bạn có thể định cấu hình tệp web.config như vậy:

<configuration>
<system.webServer>
    <httpErrors errorMode="Detailed" />
    <asp scriptErrorSentToBrowser="true"/>
</system.webServer>
<system.web>
    <customErrors mode="Off"/>
    <compilation debug="true"/>
</system.web>


1
Trên thực tế, các <system.webserver>thiết lập đã đủ trong trường hợp của tôi, cảm ơn.
marapet

4
Phần system.webServernày được IIS 7+ đọc ngay cả khi chạy ASP cổ điển
Tim Lewis

2
customErrors mode = "Off" đã làm điều đó cho tôi
spankmaster79

không còn cần thiết phải sử dụng customErrors(ví dụ: IIS 7+, ASP.NET, Classic AppPool ) tedgustaf.com/blog/2011/5/
Kiquenet

49

Nhấp đúp vào "ASP" trong màn hình chính của trang web trong quản trị viên IIS, mở rộng "Thuộc tính gỡ lỗi", bật "Gửi lỗi tới trình duyệt" và nhấp vào "Áp dụng".

Trong "Trang lỗi" trên màn hình chính, chọn "500", sau đó "Chỉnh sửa cài đặt tính năng" và chọn "Lỗi chi tiết".

Lưu ý rằng các bước tương tự áp dụng cho IIS 8.0 (Windows Server 2012).


Có thể áp dụng cho IIS 7.5, Windows 2008 R2, ASP.NET 4.5.1 (WebForms) với ClassIC AppPool (KHÔNG được tích hợp)
Kiquenet


20

Trong web.config dưới

<system.webServer>

thay thế (hoặc thêm) dòng

<httpErrors errorMode="Detailed"></httpErrors>

với

<httpErrors existingResponse="PassThrough" errorMode="Detailed"></httpErrors>

Điều này là do mặc định IIS7 chặn các mã trạng thái HTTP như 4xx và 5xx được tạo bởi các ứng dụng tiếp theo đường ống dẫn.

Tiếp theo, bật " Gửi lỗi đến trình duyệt " trong phần "ASP" và trong " Trang lỗi / Chỉnh sửa cài đặt tính năng ", chọn "Lỗi chi tiết".

Ngoài ra, cung cấp quyền Ghi trên thư mục trang web cho nhóm dựng sẵn IIS_IUSRS .


1
Đối với người dùng vỏ điện tương đương, hãy chạy:Set-WebConfigurationProperty '/system.WebServer/httpErrors' -Name errorMode -Value Detailed
Blaskovicz

20

TLDR: Trước tiên, hãy xác định xem bạn đang gặp lỗi ở đâu (cuộn tìm kiếm ảnh chụp màn hình của một cái gì đó giống với lỗi của bạn), thực hiện các thay đổi để nhận được một cái gì đó mới, lặp lại.

Trước tiên hãy xác định thông báo lỗi nào bạn đang thực sự nhìn thấy.

Nếu bạn đang xem tập tin nằm ở đây ...

% SystemDrive% \ inetpub \ custerr \\ 500.htm

... Nhìn chung là như thế này:

Lỗi mặc định IIS 500

... sau đó bạn biết rằng bạn đang thấy trang lỗi hiện được cấu hình trong ** IIS ** và bạn KHÔNG cần phải thay đổi cài đặt tùy chỉnh ASP.net, cài đặt chi tiết lỗi asp hoặc cài đặt trình duyệt "hiển thị lỗi http thân thiện".

Bạn có thể muốn nhìn vào đường dẫn được tham chiếu ở trên thay vì tin vào ảnh chụp màn hình của tôi chỉ trong trường hợp ai đó thay đổi nó.

"Có, tôi thấy lỗi được mô tả ở trên ..."

Trong trường hợp này, bạn đang thấy cài đặt < httpErrors > hoặc trong Trình quản lý IIS, đó là Trang lỗi -> Chỉnh sửa cài đặt tính năng. Mặc định cho điều này là errorMode = detailLocalOnly ở cấp nút máy chủ (trái ngược với cấp độ trang web) có nghĩa là trong khi bạn sẽ thấy trang lỗi được định cấu hình này trong khi ở xa, bạn sẽ có thể đăng nhập cục bộ vào máy chủ và xem toàn bộ lỗi sẽ trông giống như thế này:

Lỗi HTTP chi tiết

Bạn nên có mọi thứ bạn cần tại thời điểm đó để sửa lỗi hiện tại.

"Nhưng tôi không thấy lỗi chi tiết ngay cả khi duyệt trên máy chủ"

Điều đó để lại một vài khả năng.

  1. Trình duyệt bạn đang sử dụng trên máy chủ được cấu hình để sử dụng proxy trong cài đặt kết nối của nó để nó không bị xem là "cục bộ".
  2. Bạn không thực sự duyệt đến trang web mà bạn nghĩ rằng bạn đang duyệt - điều này thường xảy ra khi có bộ cân bằng tải liên quan. Thực hiện kiểm tra ping để xem dns có cung cấp cho bạn IP trên máy chủ hoặc ở nơi nào khác không.
  3. Cài đặt httpErrors của trang web của bạn chỉ được đặt cho "Tùy chỉnh". Thay đổi nó thành "Chi tiếtLocalOnly". Tuy nhiên, nếu bạn gặp lỗi cấu hình, điều này có thể không hoạt động do httpErrors cấp trang web cũng là một mục cấu hình. Trong trường hợp đó, tiến tới # 4
  4. Mặc định cho httpErrors cho tất cả các trang web được đặt cho "Tùy chỉnh". Trong trường hợp này, bạn cần nhấp vào nút máy chủ cấp cao nhất trong Trình quản lý IIS (chứ không phải một trang web cụ thể) và thay đổi cài đặt httpErrors ở đó thành Chi tiếtLocalOnly . Nếu đây là máy chủ nội bộ và bạn không lo lắng về việc tiết lộ thông tin nhạy cảm, bạn cũng có thể đặt nó thành "Chi tiết" cho phép bạn thấy lỗi từ các máy khách khác ngoài máy chủ.
  5. Bạn đang thiếu một mô-đun trên máy chủ như UrlRewrite (cái này cắn tôi rất nhiều và nó thường đưa ra thông báo chung bất kể cài đặt httpErrors).

"Đăng nhập vào máy chủ không phải là một lựa chọn cho tôi"

Thay đổi httpErrors của trang web của bạn thành "Chi tiết" để bạn có thể nhìn thấy nó từ xa. Nhưng nếu nó không hoạt động thì lỗi của bạn có thể đã là lỗi cấu hình, hãy xem # 3 ngay trên đây. Vì vậy, bạn có thể bị mắc kẹt với # 4 hoặc # 5 và bạn sẽ cần ai đó từ nhóm máy chủ của mình.

"Tôi không thấy trang lỗi được mô tả ở trên. Tôi đang thấy điều gì đó khác biệt"

Nếu bạn thấy điều này ...

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

... Và bạn sẽ thấy một cái gì đó như thế này ...

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

... sau đó bạn cần thay đổi "Gửi lỗi tới trình duyệt" thành đúng trong Trình quản lý IIS, trong Trang web -> IIS -> ASP -> Thuộc tính gỡ lỗi

Nếu bạn thấy điều này ...

tức là lỗi thân thiện 1

hoặc ...

tức là lỗi thân thiện 2

... Bạn cần phải vô hiệu hóa các lỗi thân thiện trong trình duyệt của mình hoặc sử dụng chế độ xem web của fiddler để xem phản hồi thực tế so với những gì trình duyệt của bạn chọn để hiển thị cho bạn.

Nếu bạn thấy điều này ...

Đã bật lỗi tùy chỉnh

... Sau đó, các lỗi tùy chỉnh đang hoạt động nhưng bạn không có trang lỗi tùy chỉnh (tất nhiên tại thời điểm này đã nói về .net chứ không phải asp cổ điển). Bạn cần thay đổi thẻ customErrors trong web.config thành RemoteOnly để xem trên máy chủ hoặc Tắt để xem từ xa.

Nếu bạn thấy một cái gì đó được tạo kiểu như trang web của bạn, thì có thể có lỗi tùy chỉnh On hoặc RemoteOnly và nó sẽ hiển thị trang tùy chỉnh (ví dụ: Lượt xem-> Chia sẻ-> Error.cshtml trong MVC). Điều đó nói rằng, không chắc là có thể ai đó đã thay đổi các trang trong IIS cho httpErrors vì vậy hãy xem phần đầu tiên về điều đó.


9

hãy thử đặt giá trị của thuộc tính httpErrors "currentResponse" thành "PassThrough". Của tôi được đặt ở "Thay thế" khiến YSOD không hiển thị.

<httpErrors errorMode="Detailed" existingResponse="PassThrough">

2
customErrors dành cho asp.net. httpErrors dành cho IIS7 và do đó xử lý nội dung không đi qua trình xử lý .net (ví dụ: .png, .js, v.v.) Nếu bạn muốn các trang lỗi cho các loại nội dung không phải là.net, hãy sử dụng các trang lỗi IIS (httpErrors cho IIS7 , UI cho IIS6.) Thuộc tính customErrors được sử dụng khi mã .net đang ném ngoại lệ (404, 403, 500, v.v.) và thuộc tính httpErrors được sử dụng khi chính IIS đang ném ngoại lệ. Điều này là do mặc định IIS7 chặn các mã trạng thái HTTP như 4xx và 5xx được tạo bởi các ứng dụng tiếp theo đường ống dẫn.
Kiquenet

6

Một điều không ai nhắc đến là cách khắc phục rất nhanh và tạm thời, bạn có thể xem lỗi trên localhost của máy chủ web đó.


1
Đó là nếu tùy chọn thứ ba hiển thị trong câu trả lời của Vaclav được chọn.
ricksmt

3

Bạn cũng có thể xác minh rằng nếu bạn thay đổi thư mục trang web chính ( c:\inetpub\wwwroot) sang thư mục khác, bạn phải cấp quyền đọc cho nhóm IIS_IUSRS trong thư mục mới.


3

Để những người đã thử MỌI THỨ và chỉ KHÔNG THỂ nhận được các chi tiết lỗi để hiển thị, như tôi, nên kiểm tra các mức cấu hình khác nhau. Tôi có một tệp cấu hình ở cấp Trang web và ở cấp Ứng dụng (bên trong trang web) kiểm tra cả hai. Ngoài ra, khi nó bật ra, tôi đã tắt Lỗi chi tiết trên nút cao nhất trong IIS (ngay bên dưới Trang bắt đầu, nó có tên giống với tên máy tính của máy chủ web). Kiểm tra các trang lỗi ở đó.



1

Nếu bạn chạy trình duyệt trong máy chủ và kiểm tra url của dự án bằng ip cục bộ, bạn đã nhận được tất cả các lỗi của dự án đó mà không có trang lỗi chung (ví dụ: trang lỗi 500).

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.