Question
The SLB instance uses HTTP listeners and is configured with the HEAD
method for health check. An exception is displayed in the health check when the business site can be normally accessed. To simulate the health check, you can use the HEAD
method and run nc
commands to test the status of the business site. An example command is as follows:
echo -e "HEAD /test.html HTTP/1.0\r\n\r\n" | nc -t www.example.com 80
Note: the test.html and www.example.com in the command are only examples. The actual situation is used at the site.
The HTTP status code 404 is returned as follows:
For comparison, run the curl
command to test the status of the business site.
curl -I http://www.example.com/test.html
The following figure shows that the value of the HTTP status code is 200, which is normal and is different from that of the HEAD
method and the nc
command.
The main problems mentioned above are as follows:
Problem 1 The service site can be normally accessed why the SLB health check and simulation test in
HEAD
method andnc
commands to display the site exception butcurl
command displays the site is running normally?Problem 2 The HTTP status code returned by the service site is 404. Why is health check abnormal?
Cause
The causes of the above problems are as follows:
Problem 1 The reasons for different results are as follows:
curl
command Thecurl
command is consistent with the result returned by a browser. A resource file under the requested domain is accessed, that is, the test.html file under www.example.com domain name.The health check of the SLB instance. If no health check domain name is configured for the SLB instance, the request domain name for health check is the IP address of the backend server, such as 192.0.2.1. Files are returned. Therefore, HTTP 404 status code is returned.
NoteNote: The following takes the default configuration of Nginx as an example. The default configuration of Nginx contains the default website.
HEAD
method and simulation test ofnc
commands TheHEAD
method is itself fine, but thenc
command forwards the request to the IP address corresponding to the domain name, which is the same as the SLB instance's health check. The final request will go to the default site of the Web server, so the HTTP 404 status code is returned.
Problem 2 By default, the health check configurations of the SLB instance use http_2xx and http_3xx as the normal status code. All other status code are identified as abnormal status code. HTTP 404 belongs to http_4xx, so it is health check determined as a site exception.
Answer
This topic provides different solutions for different issues.
Problem 1 Regarding this problem, there are two solutions, you can choose according to the actual situation:
Improve the health check configuration of an SLB instance. You can log on to the SLB instance of health check configuration perfect health check path and health check domain options. Herein, for example, you can set the health check domain for
www.example.com
, health check path for/test.html
. For more information about how to configure health check and these two options, see configure health check.Disable the default site for Web servers You can modify the configuration file of the Web server to disable the default site. Configuration methods vary according to the Web server. The following procedure uses an Nginx server as an example.
Remotely log on to the server where Nginx is installed.
Locate the main configuration file for Nginx. The default path is
/etc/nginx/nginx.conf
. If Nginx is installed by using the source code, you can confirm the path of the Nginx master configuration file.Edit the main configuration file of Nginx, find the server configuration segment marked as default_server, comment out this code segment with a number sign (#), and exit and save the file.
Run the following command to confirm that the updated configuration file is normal:
nginx -t
If the system returns an exception, fix it as prompted until the system returns the following.
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Run the following command to reload the Nginx configuration file:
nginx -s reload
Check the status of the health check instance again.
Problem 2 You can select the HTTP health check that are in the normal status in the status code configuration of your SLB instance based on your business needs. If you do not think HTTP 404 is a site exception, you can select http_4xx as the normal status code. For more information about how to Health Check an SLB instance, see configure health check.
Application scope
SLB