1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
|
#!/bin/bash
set -eux
RC=0
fail () {
echo "FAIL: $@" >&2
RC=1
}
function exit_handler()
{
systemctl stop apache2 || true
if test -f /run/uwsgi/uwsgi.pid; then
kill -TERM $(cat /run/uwsgi/uwsgi.pid)
fi
cat $AUTOPKGTEST_ARTIFACTS/apache2/error.log || true
cat $AUTOPKGTEST_ARTIFACTS/apache2/access.log || true
cat $AUTOPKGTEST_ARTIFACTS/apache2/uwsgi.log || true
cat $AUTOPKGTEST_ARTIFACTS/apache2/uwsgi.error.log || true
}
trap exit_handler EXIT
a2enmod proxy
a2enmod proxy_uwsgi
rsync -a /var/log/apache2 "$AUTOPKGTEST_ARTIFACTS"
rm /var/log/apache2/*
mount -o bind "$AUTOPKGTEST_ARTIFACTS/apache2" /var/log/apache2
tee /etc/apache2/sites-available/000-default.conf <<'EOF'
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
ProxyPass "/uwsgi" "unix:/run/uwsgi/test.socket|uwsgi://localhost"
</VirtualHost>
EOF
systemctl restart apache2
test -d /etc/uwsgi/ || mkdir /etc/uwsgi
tee /etc/systemd/system/uwsgi-app@.socket <<EOF
[Unit]
Description=Socket for uWSGI app %i
[Socket]
ListenStream=/run/uwsgi/%i.socket
SocketUser=www-%i
SocketGroup=www-data
SocketMode=0660
[Install]
WantedBy=sockets.target
EOF
tee /etc/systemd/system/uwsgi-app@.service <<EOF
[Unit]
Description=%i uWSGI app
After=syslog.target
[Service]
ExecStart=/usr/bin/uwsgi \
--ini /etc/uwsgi/apps-available/%i.ini \
--socket /run/uwsgi/%i.socket
User=www-%i
Group=www-data
Restart=on-failure
KillSignal=SIGQUIT
Type=notify
StandardError=file:/var/log/apache2/uwsgi.error.log
StandardOutput=file:/var/log/apache2/uwsgi.log
NotifyAccess=all
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
useradd uwsgi_test
useradd www-test
tee /etc/uwsgi/apps-available/test.ini <<EOF
[uwsgi]
chdir=/tmp
master=True
cheap=True
die-on-idle=True
manage-script-name=True
plugin=python3
wsgi-file=/tmp/uwsgi.py
EOF
tee /tmp/uwsgi.py <<'EOF'
import wsgiref.headers as h
def application(env, start_response):
buggy_header=('buggy','buggy#\r\nbuggy2:buggy2')
start_response('200 OK', [('Content-Type','text/html'),buggy_header])
ret = "Hello World Headers {}".format(env).encode()
return [ret]
EOF
chown 'www-test:www-test' /tmp/uwsgi.py
chmod +x /tmp/uwsgi.py
systemctl enable uwsgi-app@test.socket
systemctl enable uwsgi-app@test.service
systemctl start uwsgi-app@test.socket
systemctl restart apache2
wget -S -q --output-document - http://localhost/uwsgi
wget -q --output-document - http://localhost/uwsgi | grep "^Hello World"
exit $RC
-
|