2013-03-23 189 views
0

我目前正在尝试在两个目录中部署网站。尽管有很多文件,但我无法获得我所希望的行为。这是该网站的架构:nginx配置文件重定向到子文件夹

  • 主网站页面存储在/opt/www/mainsite/index.html
  • 第二个网站(使用CodeIgniter工作)存储在/ opt/WWW /应用程序/ 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; 
    } 
} 

在此page我发现所有的信息来设置CodeIgniter的配置文件。但是我不知道如何在CodeIgniter文件夹中创建指向mydomain.com/myapp的规则,以及如何配置CodeIgniter以设置正确的配置。

有人可以帮助我吗?

在此先感谢

回答

4
  • 您需要http://wiki.nginx.org/HttpFastcgiModule来设置CodeIgniter。
  • 使用2个服务器块比使用if块进行重定向要好。见IF is Evil
  • 请勿使用$ host,因为该变量值是从请求的HOST头获得的,并且可以很容易伪造。总是设置一个server_name指令并改为使用该名称。
  • 使用“return 301”指令比重写要好。保存cpu时间(正则表达式很慢)并且易于遵循。请注意,302重定向(重写...重定向)具有副作用,因为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... 
    } 
} 
+0

感谢这个有用的反应,所有的细节!我的应用程序正在运行,但文件夹“资产”不可用并返回错误404(https:// www。mydomain.com/myapp/assets必须指向/ opt/www/apps/myapp/assets,但它不起作用)。你有一个想法如何解决这个问题? – reevolt 2013-03-24 12:20:44

+1

为资产添加另一个位置块,以便您可以允许浏览器缓存这些静态文件.Nginx wiki有一个网页。 http://wiki.nginx.org/Codeigniter – 2013-03-24 13:37:23

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/; 
    } 
} 

你会把什么配置是需要为您的myapplocationmyapp内。

顺便说一句,由于XSS的担忧,在单个Host之内托管多个独立应用通常是一个糟糕的主意。

+0

http://wiki.nginx.org/IfIsEvil – Marc 2013-03-23 23:21:41

相关问题