我想将所有请求redirect到https。 它现在适用于主页面,所以我试图让http://domain.com把我redirect到https。 但是,然后我去像http://domain.com/somematerials/presentation这样的子链接,它永远不会redirect我。 这是我的configuration。
server { listen 80; return 301 https://$host$request_uri; } server { listen 443; server_name my.domain.com; ssl on; ssl_certificate /path/ssl.crt; ssl_certificate_key /path/server.key; location / { root /home/uploader/datadir/; index index.html index.htm; } }
您的端口80服务器块不是默认的。 尝试在您的端口80定义中添加default_server 。
server { listen 80 default_server; .... }
以下是testing和正确工作的configuration:
server { listen 80; # Default listen port server_name mydomain.com; return 301 https://$server_name$request_uri; } server { listen 443; ssl on ; server_name mydomain.com;; .... }
还有一种方法可以做到这一点:
server { listen 80; # Default listen port if ( $host = domain.com ) { rewrite ^/(.*)$ https://domain.com/$1 permanent; } server_name domain.com; ...... } server { listen 443; ssl on; server_name domain.com; ssl_certificate /etc/nginx/conf.d/certificates/domain.com.crt; ssl_certificate_key /etc/nginx/conf.d/certificates/domain.com.key; ....... }
我眼中的主要问题是,你没有使用server_name指令,所以nginx不知道它的重写。 随着SSL位被删除:
server { listen 80; server_name *.mydomain.com mydomain.com return 301 https://$host$request_uri; } server { listen 443; #include snippets/certloc.conf server_name my.domain.com; location / { root /home/uploader/datadir/; index index.html index.htm; } }