我在端口8080上的服务器上运行Apache,NginX作为端口80上的保留代理运行。我试图让NginX为特定URL提供静态HTML文件。我正在努力编写执行此操作的NginX配置。我有相互矛盾的指令,因为我的网址互相嵌套。
这就是我想要的:
一个网址位于/example/
,我希望NginX在我/path/to/www/example-content.html
的服务器上提供静态HTML文件,而不是让Apache将页面提供给NginX。
另一个网址位于/example/images/
,我希望Apache将该网页提供给NginX,就像它对网站的其余部分一样。
我已经设置了我的nginx.conf文件:
server {
listen 80;
server_name localhost;
# etc...
location / {
proxy_pass http://127.0.0.1:8080/;
}
# etc...
我尝试从NginX提供/example/
的静态文件是这样的:
location /example/ {
alias /path/to/www/;
index example-content.html;
}
这样可行,但这意味着/example/
网址(例如/example/images/
)之后的所有内容也都属于该本地路径。
我想使用正则表达式,但我没有找到一种方法来专门提供文件,只有文件夹。我希望能够说的是这样的:
location ~ ^/example/$ {
alias /path/to/www/example-content.html;
}
这与/example/
文件夹特别匹配,但使用这样的文件名是无效的语法。在任何情况下使用显式location = /example/
都不起作用。
如果我写这个:
location ~ ^/example/$ {
alias /path/to/www/;
index example-content.html;
}
location ~ /example/(.+) {
alias /path/to/www/$1;
}
第二个指令尝试撤消第一个指令的损坏,但它最终会覆盖第一个指令,并且无法提供静态文件。
所以我有点失落。任何建议都非常欢迎!非常感谢。
答案 0 :(得分:1)
既然你说Apache已经运行,我认为它可以运行PHP等动态内容(否则就不需要了)。在这种情况下,下面的示例配置将使用Nginx为所有静态内容提供服务,并将其他内容传递给Apache。
server {
# default index should be defined once as high up the tree as possible
# only override lower down if absolutely required
index index.html index.php
# default root should be defined once as high up the tree as possible
# only override lower down if absolutely required
root /path/to/www/
location / {
try_files $uri $uri/ @proxy;
}
location @proxy {
proxy_pass http://127.0.0.1:8080;
# Other Proxy Params
}
location ~ \.php$ {
error_page 418 = @proxy
location ~ \..*/.*\.php$ { return 400; }
return 418;
}
}
这假设您遵循结构化设置,其中每个文件夹中的默认文件称为“index.html”或“index.php”,例如“/example/index.html”,“some-folder” /index.html“和”/some-other-folder/index.html“。
这样,导航到“/ example /”,“/ some-folder /”或“/ some-other-folder /”将无需进一步操作。
如果每个文件夹都有包含随机不同名称的默认文件,例如“/example/example-content.html”,“some-folder / some-folder.html”和“some-other-folder / yet-another-”不同的default.html“,然后它变得有点困难,因为你需要做像
这样的事情server {
# default index should be defined once as high up the tree as possible
# only override lower down if absolutely required
index index.html index.php
# default root should be defined once as high up the tree as possible
# only override lower down if absolutely required
root /path/to/www/
location / {
try_files $uri $uri/ @proxy;
}
location @proxy {
# Proxy params
proxy_pass http://127.0.0.1:8080;
}
location ~ .+\.php$ {
error_page 418 = @proxy
location ~ \..*/.*\.php$ { return 400; }
return 418;
}
location /example/ {
# Need to keep defining new index due to lack of structure
# No need for alias or new root
index example-content.html;
}
location /some-folder/ {
# Need to keep defining new index due to lack of structure
# No need for alias or new root
index some-folder.html;
}
location /some-other-folder/ {
# Need to keep defining new index due to lack of structure
# No need for alias or new root
index yet-another-different-default.html;
}
# Keep adding new location blocks for each folder
# Obviously not the most efficient arrangement
}
更好的选择是在网站上设置文件的结构化和逻辑布局,而不是多个不同的位置。