fcfb8012cd
This reverts commit 68cb91097b
Just so this is not get forgotten in the tree...
We are using daemon mode and chunked is not supported in this mode.
179 lines
6.5 KiB
ReStructuredText
179 lines
6.5 KiB
ReStructuredText
=======================
|
|
Apache Deployment Guide
|
|
=======================
|
|
|
|
----------------------------
|
|
Web Front End Considerations
|
|
----------------------------
|
|
|
|
Swift can be configured to work both using an integral web front-end
|
|
and using a full-fledged Web Server such as the Apache2 (HTTPD) web server.
|
|
The integral web front-end is a wsgi mini "Web Server" which opens
|
|
up its own socket and serves http requests directly.
|
|
The incoming requests accepted by the integral web front-end are then forwarded
|
|
to a wsgi application (the core swift) for further handling, possibly
|
|
via wsgi middleware sub-components.
|
|
|
|
client<---->'integral web front-end'<---->middleware<---->'core swift'
|
|
|
|
To gain full advantage of Apache2, Swift can alternatively be
|
|
configured to work as a request processor of the Apache2 server.
|
|
This alternative deployment scenario uses mod_wsgi of Apache2
|
|
to forward requests to the swift wsgi application and middleware.
|
|
|
|
client<---->'Apache2 with mod_wsgi'<----->middleware<---->'core swift'
|
|
|
|
The integral web front-end offers simplicity and requires
|
|
minimal configuration. It is also the web front-end most commonly used
|
|
with Swift.
|
|
Additionlly, the integral web front-end includes support for
|
|
receiving chunked transfer encoding from a client,
|
|
presently not supported by Apache2 in the operation mode described here.
|
|
|
|
The use of Apache2 offers new ways to extend Swift and integrate it with
|
|
existing authentication, administration and control systems.
|
|
A single Apache2 server can serve as the web front end of any number of swift
|
|
servers residing on a swift node.
|
|
For example when a storage node offers account, container and object services,
|
|
a single Apache2 server can serve as the web front end of all three services.
|
|
|
|
The apache variant described here was tested as part of an IBM research work.
|
|
It was found that following tuning, the Apache2 offer generally equivalent
|
|
performance to that offered by the integral web front-end.
|
|
Alternative to Apache2, other web servers may be used, but were never tested.
|
|
|
|
-------------
|
|
Apache2 Setup
|
|
-------------
|
|
Both Apache2 and mod-wsgi needs to be installed on the system.
|
|
Ubuntu comes with Apache2 installed. Install mod-wsgi using::
|
|
|
|
sudo apt-get install libapache2-mod-wsgi
|
|
|
|
First, change the User and Group IDs of Apache2 to be those used by Swift.
|
|
For example in /etc/apache2/envvars use::
|
|
|
|
export APACHE_RUN_USER=swift
|
|
export APACHE_RUN_GROUP=swift
|
|
|
|
Create a directory for the Apache2 wsgi files::
|
|
|
|
sudo mkdir /var/www/swift
|
|
|
|
Create a file for each service under /var/www/swift.
|
|
|
|
For a proxy service create /var/www/swift/proxy-server.wsgi::
|
|
|
|
from swift.common.wsgi import init_request_processor
|
|
application, conf, logger, log_name = \
|
|
init_request_processor('/etc/swift/proxy-server.conf','proxy-server')
|
|
|
|
For an account service create /var/www/swift/account-server.wsgi::
|
|
|
|
from swift.common.wsgi import init_request_processor
|
|
application, conf, logger, log_name = \
|
|
init_request_processor('/etc/swift/account-server.conf',
|
|
'account-server')
|
|
|
|
For an container service create /var/www/swift/container-server.wsgi::
|
|
|
|
from swift.common.wsgi import init_request_processor
|
|
application, conf, logger, log_name = \
|
|
init_request_processor('/etc/swift/container-server.conf',
|
|
'container-server')
|
|
|
|
For an object service create /var/www/swift/object-server.wsgi::
|
|
|
|
from swift.common.wsgi import init_request_processor
|
|
application, conf, logger, log_name = \
|
|
init_request_processor('/etc/swift/object-server.conf',
|
|
'object-server')
|
|
|
|
Create a /etc/apache2/conf.d/swift_wsgi.conf configuration file that will
|
|
define a port and Virtual Host per each local service.
|
|
For example an Apache2 serving as a web front end of a proxy service::
|
|
|
|
#Proxy
|
|
NameVirtualHost *:8080
|
|
Listen 8080
|
|
<VirtualHost *:8080>
|
|
ServerName proxy-server
|
|
LimitRequestBody 5368709122
|
|
WSGIDaemonProcess proxy-server processes=5 threads=1
|
|
WSGIProcessGroup proxy-server
|
|
WSGIScriptAlias / /var/www/swift/proxy-server.wsgi
|
|
LimitRequestFields 200
|
|
ErrorLog /var/log/apache2/proxy-server
|
|
LogLevel debug
|
|
CustomLog /var/log/apache2/proxy.log combined
|
|
</VirtualHost>
|
|
|
|
Notice that when using Apache the limit on the maximal object size should
|
|
be imposed by Apache using the LimitRequestBody rather by the swift proxy.
|
|
Note also that the LimitRequestBody should indicate the same value
|
|
as indicated by max_file_size located in both
|
|
/etc/swift/swift.conf and in /etc/swift/test.conf.
|
|
The Swift default value for max_file_size (when not present) is 5368709122.
|
|
For example an Apache2 serving as a web front end of a storage node::
|
|
|
|
#Object Service
|
|
NameVirtualHost *:6000
|
|
Listen 6000
|
|
<VirtualHost *:6000>
|
|
ServerName object-server
|
|
WSGIDaemonProcess object-server processes=5 threads=1
|
|
WSGIProcessGroup object-server
|
|
WSGIScriptAlias / /var/www/swift/object-server.wsgi
|
|
LimitRequestFields 200
|
|
ErrorLog /var/log/apache2/object-server
|
|
LogLevel debug
|
|
CustomLog /var/log/apache2/access.log combined
|
|
</VirtualHost>
|
|
|
|
#Container Service
|
|
NameVirtualHost *:6001
|
|
Listen 6001
|
|
<VirtualHost *:6001>
|
|
ServerName container-server
|
|
WSGIDaemonProcess container-server processes=5 threads=1
|
|
WSGIProcessGroup container-server
|
|
WSGIScriptAlias / /var/www/swift/container-server.wsgi
|
|
LimitRequestFields 200
|
|
ErrorLog /var/log/apache2/container-server
|
|
LogLevel debug
|
|
CustomLog /var/log/apache2/access.log combined
|
|
</VirtualHost>
|
|
|
|
#Account Service
|
|
NameVirtualHost *:6002
|
|
Listen 6002
|
|
<VirtualHost *:6002>
|
|
ServerName account-server
|
|
WSGIDaemonProcess account-server processes=5 threads=1
|
|
WSGIProcessGroup account-server
|
|
WSGIScriptAlias / /var/www/swift/account-server.wsgi
|
|
LimitRequestFields 200
|
|
ErrorLog /var/log/apache2/account-server
|
|
LogLevel debug
|
|
CustomLog /var/log/apache2/access.log combined
|
|
</VirtualHost>
|
|
|
|
Next stop the Apache2 and start it again (apache2ctl restart is not enough)::
|
|
|
|
apache2ctl stop
|
|
apache2ctl start
|
|
|
|
Edit the tests config file and add::
|
|
|
|
web_front_end = apache2
|
|
normalized_urls = True
|
|
|
|
Also check to see that the file includes max_file_size of the same value as
|
|
used for the LimitRequestBody in the apache config file above.
|
|
|
|
We are done.
|
|
You may run functional tests to test - e.g.::
|
|
|
|
cd ~swift/swift
|
|
./.functests
|