Reputation: 4598
I have Apache 2.2.15 configured with Mod_Proxy and Mod_SSL and serving CherryPy web application on RHEL 6.3. The only thing I'm struggling with is getting Apache to serve the website's static content (*.js, *.css, *.jpg). Here is my VirtualHost entry...
<VirtualHost mydomain.com:443>
ServerAdmin [email protected]
ServerName mydomain.com
ProxyPreserveHost On
SSLProxyEngine On
DocumentRoot /var/www/html/mydomain
SSLEngine on
SSLCertificateKeyFile /etc/ssl/myserver.key
SSLCertificateFile /etc/ssl/mydomain_com.crt
SSLCertificateChainFile /etc/ssl/mydomain_com.ca-bundle
# this prevents the follow URL path from being proxied
ProxyPass static/ !
# setup the proxy
<Proxy *>
Order allow,deny
Allow from all
</Proxy>
ProxyPass / http://www.mydomain.com:8080/
ProxyPassReverse / http://www.mydomain.com:8080/
</VirtualHost>
For instance the path to my css file is the following...
/var/www/html/mydomain/static/style.css
Since I'm forcing the entire site to be in https when I navigate to
https://www.mydomain.com/static/style.css
or
http://www.mydomain.com/static/style.css
My browser tells me the page is not found (404). Can anyone see what I'm doing wrong?
EDIT: it appears that Apache is still proxying /static... I found this redirect when accessing the /static/style.css in my Apache access log...
xxx.xxx.xxx.xxx - - [17/Sep/2012:08:46:06 -0400] "GET /static/style.css HTTP/1.1" 301 337 "https://www.mydmain.com/Home/" "Mozilla/5.0 (X11; Linux x86_64; rv:10.0.7) Gecko/20120826 Firefox/10.0.7"
anyone know why that is happening?
Thanks in advance!
Andrew
Upvotes: 4
Views: 2780
Reputation: 1073
Try adding an alias for your static folder before ProxyPass. It worked like champ for me,
Alias /static/ /var/www/html/mydomain/static/
Upvotes: 2
Reputation: 121
If the static files are under the "main" source folder, I'd suggest telling CherryPy to serve the specific folder(s) for stylesheets, images, js etc
Personally I generate the config and then use that config when mounting the application like:
app = cherrypy.tree.mount(Root(), script_name="", config=somefile.get_config())
An example of static file serving with CherryPy.
/css
is the path that you use from within your templates or
HTML.os.path.abspath(os.path.join(os.path.dirname(__file__)
generates a path pointing to your index file (or some other script if your not starting quickstart() from within the index)File:
##somefile
def get_config():
return {
'/':
{
'tools.encode.on': True,
'tools.encode.encoding': 'UTF-8'
},
'/css':
{
'tools.staticdir.on': True,
'tools.staticdir.dir': os.path.abspath(os.path.join(os.path.dirname(__file__), 'relative/path/to/your/css/folder'))
},
'/js':
{
'tools.staticdir.on': True,
'tools.staticdir.dir': os.path.abspath(os.path.join(os.path.dirname(__file__), 'relative/path/to/your/js/folder'))
}
}
Upvotes: 1