└── tcp_servers ├── __init__.py ├── async.py ├── fork.py ├── itportal.conf ├── mipt.conf ├── nginx.conf ├── prefork.py ├── simple.py ├── simple_http.py └── stackoverflow.conf /tcp_servers/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | -------------------------------------------------------------------------------- /tcp_servers/async.py: -------------------------------------------------------------------------------- 1 | #!/usr/local/bin/python 2 | 3 | import socket 4 | import select 5 | 6 | 7 | server_socket = socket.socket() 8 | server_socket.bind(('', 8080)) 9 | server_socket.setblocking(0) 10 | server_socket.listen(10) 11 | 12 | inputs = {server_socket} 13 | outputs = {} 14 | excepts = [] 15 | 16 | 17 | while 1: 18 | input_ready, output_ready, except_ready = select.select(list(inputs), outputs.keys(), excepts, 0.5) 19 | for s in input_ready: 20 | if s == server_socket: 21 | client_socket, remote_address = server_socket.accept() 22 | client_socket.setblocking(0) 23 | inputs.add(client_socket) 24 | else: 25 | request = s.recv(1024) 26 | print '{} : {}'.format(s.getpeername(), request) 27 | outputs[s] = request.upper() 28 | inputs.remove(s) 29 | for s in output_ready: 30 | if s in outputs: 31 | s.send(outputs[s]) 32 | del outputs[s] 33 | s.close() 34 | -------------------------------------------------------------------------------- /tcp_servers/fork.py: -------------------------------------------------------------------------------- 1 | #!/usr/local/bin/python 2 | 3 | import os 4 | import socket 5 | import sys 6 | 7 | 8 | server_socket = socket.socket() 9 | server_socket.bind(('', 8080)) 10 | server_socket.listen(10) 11 | 12 | while True: 13 | client_socket, remote_address = server_socket.accept() 14 | child_pid = os.fork() 15 | if child_pid == 0: 16 | request = client_socket.recv(1024) 17 | client_socket.send(request.upper()) 18 | print '(child {}) {} : {}'.format(client_socket.getpeername(), request) 19 | client_socket.close() 20 | sys.exit() 21 | else: 22 | client_socket.close() 23 | 24 | server_socket.close() 25 | -------------------------------------------------------------------------------- /tcp_servers/itportal.conf: -------------------------------------------------------------------------------- 1 | upstream itportal { 2 | server 127.0.0.1:8003; 3 | } 4 | 5 | server { 6 | server_name itportal.sat2707.com; 7 | listen 80; 8 | client_max_body_size 32m; 9 | 10 | location / { 11 | proxy_pass http://itportal; 12 | proxy_set_header Host itportal.sat2707.com; 13 | proxy_set_header X-Real-IP $remote_addr; 14 | proxy_read_timeout 60s; 15 | } 16 | 17 | location /static/ { 18 | alias /home/stycenko/it-portal/it-portal/collected_static/; 19 | } 20 | 21 | location /media/ { 22 | proxy_set_header Host webdav.itportal.sat2707.com; 23 | proxy_pass http://webdav.itportal.sat2707.com; 24 | } 25 | } 26 | 27 | server { 28 | server_name webdav.itportal.sat2707.com; 29 | 30 | location /media/{ 31 | access_log off; 32 | alias /home/stycenko/it-portal/webdav/; 33 | } 34 | 35 | location /webdav/ { 36 | alias /home/stycenko/it-portal/webdav/; 37 | dav_methods PUT DELETE MKCOL COPY MOVE; 38 | create_full_put_path on; 39 | dav_access group:rw all:rw; 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /tcp_servers/mipt.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | server_name mipt.sat2707.com; 4 | location / { 5 | proxy_pass https://mipt.ru/; 6 | sub_filter "МФТИ" "МГУ"; 7 | sub_filter_once off; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /tcp_servers/nginx.conf: -------------------------------------------------------------------------------- 1 | user www-data; 2 | worker_processes 4; 3 | pid /var/run/nginx.pid; 4 | 5 | events { 6 | worker_connections 768; 7 | # multi_accept on; 8 | } 9 | 10 | http { 11 | 12 | ## 13 | # Basic Settings 14 | ## 15 | 16 | sendfile on; 17 | tcp_nopush on; 18 | tcp_nodelay on; 19 | keepalive_timeout 65; 20 | types_hash_max_size 2048; 21 | # server_tokens off; 22 | 23 | server_names_hash_bucket_size 64; 24 | # server_name_in_redirect off; 25 | 26 | include /etc/nginx/mime.types; 27 | default_type application/octet-stream; 28 | 29 | ## 30 | # Logging Settings 31 | ## 32 | 33 | access_log /var/log/nginx/access.log; 34 | error_log /var/log/nginx/error.log; 35 | 36 | ## 37 | # Gzip Settings 38 | ## 39 | 40 | gzip on; 41 | gzip_disable "msie6"; 42 | 43 | # gzip_vary on; 44 | # gzip_proxied any; 45 | # gzip_comp_level 6; 46 | # gzip_buffers 16 8k; 47 | # gzip_http_version 1.1; 48 | # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; 49 | 50 | ## 51 | # nginx-naxsi config 52 | ## 53 | # Uncomment it if you installed nginx-naxsi 54 | ## 55 | 56 | #include /etc/nginx/naxsi_core.rules; 57 | 58 | ## 59 | # nginx-passenger config 60 | ## 61 | # Uncomment it if you installed nginx-passenger 62 | ## 63 | 64 | #passenger_root /usr; 65 | #passenger_ruby /usr/bin/ruby; 66 | 67 | ## 68 | # Virtual Host Configs 69 | ## 70 | 71 | include /etc/nginx/conf.d/*.conf; 72 | include /etc/nginx/sites-enabled/*; 73 | } 74 | 75 | 76 | #mail { 77 | # # See sample authentication script at: 78 | # # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript 79 | # 80 | # # auth_http localhost/auth.php; 81 | # # pop3_capabilities "TOP" "USER"; 82 | # # imap_capabilities "IMAP4rev1" "UIDPLUS"; 83 | # 84 | # server { 85 | # listen localhost:110; 86 | # protocol pop3; 87 | # proxy on; 88 | # } 89 | # 90 | # server { 91 | # listen localhost:143; 92 | # protocol imap; 93 | # proxy on; 94 | # } 95 | #} 96 | -------------------------------------------------------------------------------- /tcp_servers/prefork.py: -------------------------------------------------------------------------------- 1 | #!/usr/local/bin/python 2 | 3 | import os 4 | import socket 5 | import sys 6 | 7 | 8 | server_socket = socket.socket() 9 | server_socket.bind(('', 8080)) 10 | server_socket.listen(10) 11 | 12 | for i in range(4): 13 | child_pid = os.fork() 14 | if child_pid == 0: 15 | try: 16 | while True: 17 | client_socket, remote_address = server_socket.accept() 18 | request = client_socket.recv(1024) 19 | client_socket.send(request.upper()) 20 | print '(child {}) {} : {}'.format(os.getpid(), client_socket.getpeername(), request) 21 | client_socket.close() 22 | except KeyboardInterrupt: 23 | sys.exit() 24 | 25 | try: 26 | os.waitpid(-1, 0) 27 | except KeyboardInterrupt: 28 | sys.exit() 29 | -------------------------------------------------------------------------------- /tcp_servers/simple.py: -------------------------------------------------------------------------------- 1 | #!/usr/local/bin/python 2 | 3 | import socket 4 | 5 | 6 | server_socket = socket.socket() 7 | server_socket.bind(('', 8080)) 8 | server_socket.listen(10) 9 | 10 | 11 | while True: 12 | client_socket, remote_address = server_socket.accept() 13 | try: 14 | request = client_socket.recv(1024) 15 | client_socket.send(request.upper()) 16 | print '{} : {}'.format(client_socket.getpeername(), request) 17 | client_socket.close() 18 | except: 19 | pass 20 | 21 | server_socket.close() 22 | -------------------------------------------------------------------------------- /tcp_servers/simple_http.py: -------------------------------------------------------------------------------- 1 | #!/usr/local/bin/python 2 | 3 | import os 4 | import socket 5 | 6 | 7 | def get_filename(request): 8 | first_line = request.splitlines()[0] 9 | filename = first_line.split(' ')[1][1:] 10 | return filename 11 | 12 | def get_response(filename): 13 | files = os.listdir('.') 14 | if filename == '': 15 | return '
'.join('{}'.format(f, f) for f in files) 16 | elif filename in files: 17 | return 'Back
{}
'.format(open(filename, 'r').read()) 18 | else: 19 | return '404 Not found' 20 | 21 | 22 | server_socket = socket.socket() 23 | server_socket.bind(('', 8080)) 24 | server_socket.listen(10) 25 | 26 | while True: 27 | client_socket, remote_address = server_socket.accept() 28 | try: 29 | request = client_socket.recv(1024) 30 | filename = get_filename(request) 31 | client_socket.send(get_response(filename)) 32 | print '{} : {}'.format(client_socket.getpeername(), filename) 33 | client_socket.close() 34 | except: 35 | pass 36 | 37 | server_socket.close() 38 | -------------------------------------------------------------------------------- /tcp_servers/stackoverflow.conf: -------------------------------------------------------------------------------- 1 | upstream stackoverflow { 2 | server 127.0.0.1:8080; 3 | } 4 | 5 | server { 6 | server_name localhost; 7 | listen 80; 8 | 9 | location / { 10 | proxy_pass http://stackoverflow; 11 | } 12 | 13 | location /static/ { 14 | alias /home/vagrant/stackoverflow/collected_static/; 15 | } 16 | 17 | location /media/ { 18 | root /home/vagrant/stackoverflow/; 19 | } 20 | 21 | } 22 | --------------------------------------------------------------------------------