我想从同一台服务器运行多个域。我希望 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。以下配置哪里出错了?
端口配置文件
NameVirtualHost *:80
Listen 8080
nginx/sites-available/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/sites-available/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/sites-available/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/sites-available/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”href。有没有更好的方法来重写 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;
}
这看起来确实很“黑客”并且不优雅。
答案1
根指令应该处于服务器级别。
server {
listen 80;
server_name one.com;
root /var/www/one;
...
server {
listen 80;
server_name two.com;
root /var/www/two;
...
还要确保 Apache 中的文档根目录为每个文档正确定义。
答案2
看起来非常复杂。为什么不在所有级别都使用 nginx?无论如何,我遇到的有关 NGINX 配置的最佳参考仍然是: https://calomel.org/nginx.html
- 选项 1:使用 Nginx 网络服务器提供静态文件
这是运行在端口 80 (http) 上的一个基本的 Web 服务器,用于提供网页。虽然我们添加了很多安全检查,但这是你能得到的最基本的服务器。在 AMD64 2GHz 机器上,此配置每分钟可以轻松提供数千个页面。