└── 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 | --------------------------------------------------------------------------------