我想从同一台服务器运行多个域。 我想nginx坐在Apache的前面,并提供静态文件。 因此请求one.com/site_media/logo.png指向/var/www/one/site_media/logo.png和two.com/site_media/logo.png指向/var/www/two/site_media/logo.png 。 我在哪里出错在以下configuration?
ports.conf
NameVirtualHost *:80 Listen 8080
nginx的/网站可用/ one.com
server { listen 80; server_name one.com; access_log /var/www/one/nginx_access.log; error_log /var/www/one/nginx_error.log; location / { proxy_pass http://127.0.0.1:8080/; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Magic-Header "secret"; client_max_body_size 10m; } location ^~ /site_media/ { root /var/www/one; if ($query_string) { expires max; } }
nginx的/网站可用/ two.com
server { listen 80; server_name two.com; access_log /var/www/two/nginx_access.log; error_log /var/www/two/nginx_error.log; location / { proxy_pass http://127.0.0.1:8080/; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Magic-Header "secret"; client_max_body_size 10m; } location ^~ /site_media/ { root /var/www/two; if ($query_string) { expires max; } }
的Apache2 /网站可用/ one.com
<VirtualHost *:8080> ServerName one.com ServerAlias www.one.com WSGIScriptAlias / /var/www/one/one.wsgi ErrorLog /var/www/one/apache_error.log LogLevel warn CustomLog /var/www/one/apache_access.log combined </VirtualHost>
的Apache2 /网站可用/ two.com
<VirtualHost *:8080> ServerName two.com ServerAlias www.two.com WSGIScriptAlias / /var/www/two/two.wsgi ErrorLog /var/www/one/apache_error.log LogLevel warn CustomLog /var/www/one/apache_access.log combined </VirtualHost>
two.com上的“/site_media/logo.png”请求失败,因为服务器在/ var / www / one / site_media中查找。 我想保留这两个网站的“/ site_media”hrefs。 有没有更好的方法来重写nginx的位置^〜/ site_media /? 或者是其他东西?
(编辑)我的解决方法是:
location ^~ /site_media/ { if ($host = 'one.com') { root /var/www/one; } if ($host = 'two.com') { root /var/www/two; } if ($query_string) { expires max; }
这看起来真的很“哈克”,并不优雅。
根指令应该在服务器级别。
server { listen 80; server_name one.com; root /var/www/one; ... server { listen 80; server_name two.com; root /var/www/two; ...
还要确保Apache中的文档根目录已经正确定义了。
似乎难以置信的复杂。 你为什么不使用nginx的所有级别? 无论如何,我所遇到的NGINXconfiguration的最佳参考依然是: https ://calomel.org/nginx.html
这是运行在端口80(http)上的基本web服务器,用于提供网页。 虽然我们已经增加了很多安全检查,但是这是最基本的服务器。 在AMD64 2GHz的机器上,这个configuration一分钟就可以轻松提供数千页的内容。