Error 401 only sometimes
So I'm running a few websites on a single server with a apache2, php, and mysql configuration. Depending on the connection being used the server either responds with the webpage requested or an error 401 authentication needed. Cell phones are a big one for this: on LTE or 3G connection the website will never load.
Sorry I'm fairly new in this stuff and I don't know which files to even begin to look at for fixing this; especially for the network side of things.
Thanks,
Waddle.
10 Replies
Thank you for reaching out. There can be possibly a few reasons for this, but the best way to help will be to provide us with the domain you are using and the IP address of the server. Also, I would recommend taking a look at your Apache logs to see if there are any errors reported.
Thanks in advance!
Regards,
Stephen Crane…
Linode Customer Support
Currently the two domains being used are muzombies.org and trumanzombies.org. The apache logs say two things:
One, a file /htdocs does not exist
Two, there are a few invalid method in request.
Both of these are for the server in general. When I delve into just the individual websites' error logs the biggest problem seems to be different users are not found. I am fairly certain that this is an entire server problem as both websites do the same thing.
Also, the error 401 authorization does allow the server user name/password combination through to myphpadmin which is set up as the last virtual host in the websites' config files. Could it be that the system routes the clients to the wrong virtual host?
To answer Vance, both IPv6 and IPv4 are configured from what I can tell. The server is listening to ports under each.
Thank you!
curl -6v muzombies.org
Rebuilt URL to: muzombies.org/
Trying 2600:3c03::f03c:91ff:fe92:9388…
Connected to muzombies.org (2600:3c03::f03c:91ff:fe92:9388) port 80 (#0)
GET / HTTP/1.1
Host: muzombies.org
User-Agent: curl/7.47.0
Accept: /
>
< HTTP/1.1 401 Authorization Required
< Server: Apache/2.2.14 (Ubuntu)
< WWW-Authenticate: Basic realm="Restricted"
< Vary: Accept-Encoding
< Content-Type: text/html; charset=iso-8859-1
< Content-Length: 480
< Accept-Ranges: bytes
< Date: Tue, 07 Nov 2017 21:27:29 GMT
< X-Varnish: 1670810917
< Age: 0
< Via: 1.1 varnish
< Connection: keep-alive
<
Authorization Required
This server could not verify that you
are authorized to access the document
requested. Either you supplied the wrong
credentials (e.g., bad password), or your
browser doesn't understand how to supply
the credentials required.
Apache/2.2.14 (Ubuntu) Server at muzombies.org Port 80
- Connection #0 to host muzombies.org left intact
You're going to want to make sure your virtual hosts configurations include IPv6, or you should disable IPv6 and remove the AAAA records from your DNS. I think either of those two options should clear up what you are seeing.
EDIT: I should add, I don't experience this issue curling the domain over IPv4, but when I curl the IPv4 address directly, I get the same response:
curl -v 50.116.59.6
Rebuilt URL to: 50.116.59.6/
Trying 50.116.59.6…
Connected to 50.116.59.6 (50.116.59.6) port 80 (#0)
GET / HTTP/1.1
Host: 50.116.59.6
User-Agent: curl/7.47.0
Accept: /
>
< HTTP/1.1 401 Authorization Required
< Server: nginx/1.4.1
< Date: Tue, 07 Nov 2017 21:34:29 GMT
< Content-Type: text/html; charset=iso-8859-1
< Content-Length: 478
< Connection: keep-alive
< WWW-Authenticate: Basic realm="Restricted"
< Vary: Accept-Encoding
<
Authorization Required
This server could not verify that you
are authorized to access the document
requested. Either you supplied the wrong
credentials (e.g., bad password), or your
browser doesn't understand how to supply
the credentials required.
Apache/2.2.14 (Ubuntu) Server at 50.116.59.6 Port 80
- Connection #0 to host 50.116.59.6 left intact
This I think confirms that what's happening is the virtual hosts don't include the IPv6 addresses, so instead of directing to the correct root folder we get redirected to the default page which is giving the 401.
The virtual host file:
ServerName muzombies.org
DocumentRoot …
ErrorLog …
CustomLog …
AllowOverride All
Order allow,deny
allow from all
And the ports.conf file:
NameVirtualHost IPv4 address:8080
Listen 8080
Do I need to add a listen to other ports then add that the website should also listen to said ports?
ServerName second.domain
ServerAlias
ErrorLog …
CustomLog …
I think this guide should help:
EDIT: Actually, double checking. Are you currently using Nginx or Apache? Because when I check, I get the following:
curl -4Il
HTTP/1.1 200 OK
Server: nginx/1.4.1
Date: Tue, 07 Nov 2017 22:23:20 GMT
Content-Type: text/html
Connection: keep-alive
X-Powered-By: PHP/5.3.2-1ubuntu4.9
Set-Cookie: PHPSESSID=fs9d265sni9lrod3qrubj89c13; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
But then on IPv6 I get the following:
curl -6Il
HTTP/1.1 401 Authorization Required
Server: Apache/2.2.14 (Ubuntu)
WWW-Authenticate: Basic realm="Restricted"
Vary: Accept-Encoding
Content-Type: text/html; charset=iso-8859-1
Date: Tue, 07 Nov 2017 22:24:27 GMT
X-Varnish: 1670810920
Age: 0
Via: 1.1 varnish
Connection: keep-alive
Also, I would recommend taking a look at this guide:
The two addresses are [::]:8080 and 0.0.0.0:8000
I don't get it. netstat -tulpn says they aren't in use but there is no connecting when I restart apache2. I'm just confused now.
The ports.config file for apache says this:
Nginx reverse-proxy
NameVirtualHost IP.address.v4:8080
Listen 8080
Add IPv6?
NameVirtualHost [IP.address.v6]:8180
Listen 8180
Varnish reverse proxy
NameVirtualHost [IP.address.v4]:8000
Listen 8000
So overall I am not sure which one I am using. I did not set this server up initially. I am apart of an org and the current webmaster so I was passed it down from the last person. All of the sites are enabled through apache and the nginx folder has only the default in it. So I would guess from that its Apache.
When I run 'netstat -tulpn | grep tcp' I get results that include
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 17880/varnishd
tcp6 0 0 :::8180 :::* LISTEN 19915/apache2
tcp6 0 0 :::8000 :::* LISTEN 19915/apache2
tcp6 0 0 :::8080 :::* LISTEN 19915/apache2
tcp6 0 0 :::80 :::* LISTEN 17880/varnishd
I'm sorry I'm not understanding the details straight off the bat. I'm an ECE major so I'm a little out of my area. However, I've learned a lot. Thank you for your help so far. Hopefully, this gets cleared up soon!
so scrane, since you asked about nginx I went in and looked at the file system. It is installed and the default was enabled. I looked into the configuration file and nginx forwards the requests on to apache under the local ipaddress. I was trying to change the values in the wrong place the entire time due to this. However, the websites now seem functional so I'm going with it.
Thank you again for all your help.