Сделаем прокси с basic authentication на nginx.
Берём nginx, в стандартный конфиг добавляем:
(нужно посетить
доку nginx)
server {
listen 8254;
location / {
auth_basic "closed site";
auth_basic_user_file /home/vagrant/htpasswd;
proxy_pass http://precise64:3812;
}
}
В файлике htpasswd:
zubizu:Km4hLNggQPzAE
Запустили nginx.
Пишем сервер, его мы спрячем за nginx.
import socket
HOST = socket.gethostname()
PORT = 3812
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((HOST, PORT))
server.listen(1)
while True:
conn, addr = server.accept()
data = conn.recv(1024)
if not data: break
conn.sendall('HTTP/1.1 200 OK\n\nHello!')
print(data)
conn.close()
Запускаем сервер.
Пишем клиент.
import socket
HOST = socket.gethostname()
PORT = 8254
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((HOST, PORT))
client.sendall('GET / HTTP/1.1\nHost: precise64\nAuthorization:Basic enViaXp1OnB5dGhvbg==\n\n')
data = client.recv(1024)
client.close()
print 'Received', repr(data)
Уберём один символ из заголовка Authorization(eViaXp1OnB5dGhvbg==, хэш неверный => нас не пустят)
Запустим клиент и увидим:
Received 'HTTP/1.1 401 Unauthorized\r\nServer: nginx/1.4.5\r\nDate: Fri, 12 Sep 2014 19:30:44 GMT\r\nContent-Type: text/html\r\nContent-Length: 194\r\nConnection: keep-alive\r\nWWW-Authenticate: Basic realm="closed site"\r\n\r\n<html>\r\n<head><title>401 Authorization Required</title></head>\r\n<body bgcolor="white">\r\n<center><h1>401 Authorization Required</h1></center>\r\n<hr><center>nginx/1.4.5</center>\r\n</body>\r\n</html>\r\n'
Вернём символ на место.
Запустим клиент.
nginx нас пропустил и сервер отдал ответ:
Received 'HTTP/1.1 200 OK\r\nServer: nginx/1.4.5\r\nDate: Fri, 12 Sep 2014 19:32:45 GMT\r\nTransfer-Encoding: chunked\r\nConnection: keep-alive\r\n\r\n6\r\nHello!\r\n0\r\n\r\n'