我需要了解如何只监听一个端口-主机名组合并在每个其他请求上返回 404。
我的例子:
我为 owncloud 设置了一个子域,它使用 SSL 并监听端口 12345 而不是 443。假设这个子域是 oc.example.com。所以我希望 nginx只听 https://oc.example.com:12345而不是
- http://oc.example.com:12345 _
- https://oc.example.com : X其中 X != 12345
- https://BLABLA.example.com:12345 _ _
- http://IP.IP.IP.IP :12345
- https ://IP.IP.IP.IP:12345
- 等等
如果请求任何与https://oc.example.com:12345不完全匹配的资源,则应返回错误(例如 404 未找到),或者服务器根本不应响应。
到目前为止,我的配置如下所示:
server {
# I think there's something wrong here?
listen 12345;
server_name oc.example.com;
ssl on;
ssl_certificate /etc/ssl/nginx/owncloud/owncloud.crt;
ssl_certificate_key /etc/ssl/nginx/owncloud/owncloud.key;
add_header Strict-Transport-Security max-age=31536000;
add_header X-Frame-Options DENY;
# Path to the root of your installation
root /var/some/path/to/my/owncloud/;
client_max_body_size 10G; # set max upload size
fastcgi_buffers 64 4K;
rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;
rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;
rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;
index index.php;
error_page 403 = /core/templates/403.php;
error_page 404 = /core/templates/404.php;
... here are the definitions of my locations
}
我阅读了文档,发现 nginx 首先通过端口号查找正确的服务器定义。如果有多个匹配项,则使用 server_name 来查找正确的定义。但我只有一个定义!
有人知道如何解决这个问题吗?