0

我目前正在尝试在两个目录中部署一个网站。尽管有很多文档,但我无法获得我希望的行为。这是网站的架构:

  • 主网站页面存储在 /opt/www/mainsite/index.html
  • 第二个网站(使用 CodeIgniter)存储在 /opt/www/apps/myapp/index.php

我希望配置 nginx 来获得这种行为:

  • http中的所有请求都必须重定向到https
  • www.mydomain.com 必须指向 /opt/www/mainsite/index.html
  • www.mydomain.com/myapp 必须指向 /opt/www/apps/myapp/index.php

目前,我的配置文件包含:

# redirect http to https
server {
    listen 80;
    rewrite ^(.*) https://$host$1 permanent;
}

# main webiste
server {
    listen 443;

    # ssl elements...  
    root   /opt/www/mainsite;
    index index.html;
    server_name             www.mydomain.com;

    location / {
            try_files $uri $uri/ /index.html;
    }
}

在此页面上,我找到了为 CodeIgniter 设置配置文件的所有信息。但我不知道如何创建规则以将 mydomain.com/myapp 指向 CodeIgniter 文件夹以及如何配置 CodeIgniter 以设置正确的配置。

有人可以帮助我吗?

提前致谢

4

2 回答 2

4
  • 您需要http://wiki.nginx.org/HttpFastcgiModule来设置 CodeIgniter。
  • 使用 2 个服务器块比使用 if 块进行重定向更好。参见IF 是邪恶的
  • 不要使用 $host,因为该变量值是从请求的 HOST 标头中获得的,并且很容易被伪造。始终设置 server_name 指令并改用该名称。
  • 使用“return 301”指令比重写更好。节省 CPU 时间(正则表达式很慢)并且易于理解。请注意,302 重定向(rewrite...redirect)有副作用,因为 302 会将所有 POST 请求转换为 GET 请求,这在您的情况下不好。
  • 您不需要在主站点中使用 try_files,因为主站点只提供静态文件。但是你可以使用'expires'指令来允许浏览器缓存静态文件。
server {
    listen 80;
    server_name www.mydomain.com;
    return 301 https://$server_name$request_uri;
 }

 server {
    listen 443;
    server_name www.mydomain.com;
    # ssl elements...  

    location / {
        root   /opt/www/mainsite;
        index index.html;
        expires max;
    }

    location /myapp {
        root /opt/www/apps/myapp;
        # fastcgi module goes here...
    }
}
于 2013-03-23T23:43:36.413 回答
0
server {
    listen 80;
    listen 443 ssl;
    …
    if ($scheme != "https") {
        rewrite ^ https://$server_name$request_uri? redirect;
    }
    root /opt/www/mainsite/;
    location /myapp {
        root /opt/www/apps/myapp/;
    }
}

您可以将您所需的任何配置放在myappforlocationmyapp

Host顺便说一句,由于 XSS 问题,在单个 中托管多个独立应用程序通常是一个坏主意。

于 2013-03-23T20:17:05.930 回答