VPS侦探论坛

 找回密码
 注册
查看: 7867|回复: 6

301不是判断if ($host != 这种转跳怎么设置?

[复制链接]
发表于 2013-1-30 09:19:01 | 显示全部楼层 |阅读模式

server {
    listen       80;
    server_name  www.example.org  example.org;
    if ($http_host = example.org) {
        rewrite  (.*)  http://www.example.org$1;
    }
    ...
}


这种做法是错的,复杂而且低效。正确的方式是为example.org定义一个单独的服务器:
server {
    listen       80;
    server_name  example.org;
    return       301 http://www.example.org$request_uri;
}

server {
    listen       80;
    server_name  www.example.org;
    ...
}


网络上搜的都是上面那种301.我想用下面那种方法做301转跳。我只绑定了一个域名,nginx.conf里怎么配置啊?/home/wwwroot/放在上面的server还是下面的?能否给个例子?
美国VPS推荐: 遨游主机LinodeLOCVPS主机云搬瓦工80VPSVultr美国VPS主机中国VPS推荐: 阿里云腾讯云。LNMP付费服务(代装/问题排查)QQ 503228080
发表于 2013-1-30 09:57:25 | 显示全部楼层


你给的方法已经很详细了
你发的就是一个例子,你域名是什么就改改域名对应的配置文件就行
Linux下Nginx+MySQL+PHP自动安装工具:https://lnmp.org
 楼主| 发表于 2013-1-30 11:22:11 | 显示全部楼层

user  www www;

worker_processes 1;

error_log  /home/wwwlogs/nginx_error.log  crit;

pid        /usr/local/nginx/logs/nginx.pid;

#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;

events
        {
                use epoll;
                worker_connections 51200;
        }

http
        {
                include       mime.types;
                default_type  application/octet-stream;

                server_names_hash_bucket_size 128;
                client_header_buffer_size 32k;
                large_client_header_buffers 4 32k;
                client_max_body_size 50m;

                sendfile on;
                tcp_nopush     on;

                keepalive_timeout 60;

                tcp_nodelay on;

                fastcgi_connect_timeout 300;
                fastcgi_send_timeout 300;
                fastcgi_read_timeout 300;
                fastcgi_buffer_size 64k;
                fastcgi_buffers 4 64k;
                fastcgi_busy_buffers_size 128k;
                fastcgi_temp_file_write_size 256k;

                gzip on;
                gzip_min_length  1k;
                gzip_buffers     4 16k;
                gzip_http_version 1.0;
                gzip_comp_level 2;
                gzip_types       text/plain application/x-javascript text/css application/xml;
                gzip_vary on;

                #limit_zone  crawler  $binary_remote_addr  10m;

                #log format
                log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
             '$status $body_bytes_sent "$http_referer" '
             '"$http_user_agent" $http_x_forwarded_for';

server
        {
                listen       80;
                server_name www.example.org example.org;
                index index.html index.htm index.php;
                root  /home/wwwroot;
                           return       301 http://www.example.org$request_uri;
             }
server {
     listen       80;
     server_name  www.example.org;
     ...
}


                location ~ .*\.(php|php5)?$
                        {
                                try_files $uri =404;
                                fastcgi_pass  unix:/tmp/php-cgi.sock;
                                fastcgi_index index.php;
                                include fcgi.conf;
                        }

                location /status {
                        stub_status on;
                        access_log   off;
                }

                location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
                        {
                                expires      30d;
                        }

                location ~ .*\.(js|css)?$
                        {
                                expires      12h;
                        }

                access_log  /home/wwwlogs/access.log  access;
        }
include vhost/*.conf;
}


是不是这样就可以了?那别人访问我vps  ip的时候是不是也会强制跳转到域名?
美国VPS推荐: 遨游主机LinodeLOCVPS主机云搬瓦工80VPSVultr美国VPS主机中国VPS推荐: 阿里云腾讯云。LNMP付费服务(代装/问题排查)QQ 503228080
发表于 2013-1-30 13:35:00 | 显示全部楼层



  1. server
  2.         {
  3.                 listen       80;
  4.                 server_name www.example.org;
  5.                 index index.html index.htm index.php;
  6.                 root  /home/wwwroot;

  7.                 location ~ .*\.(php|php5)?$
  8.                         {
  9.                                 try_files $uri =404;
  10.                                 fastcgi_pass  unix:/tmp/php-cgi.sock;
  11.                                 fastcgi_index index.php;
  12.                                 include fcgi.conf;
  13.                         }

  14.                 location /status {
  15.                         stub_status on;
  16.                         access_log   off;
  17.                 }

  18.                 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
  19.                         {
  20.                                 expires      30d;
  21.                         }

  22.                 location ~ .*\.(js|css)?$
  23.                         {
  24.                                 expires      12h;
  25.                         }

  26.                 access_log  /home/wwwlogs/access.log  access;
  27.         }
  28. server {
  29.     listen       80;
  30.     server_name  example.org;
  31.     return       301 http://www.example.org$request_uri;
  32. }
  33. include vhost/*.conf;
  34. }
复制代码
如果要其他的域名也调整只能采取if判断
Linux下Nginx+MySQL+PHP自动安装工具:https://lnmp.org
 楼主| 发表于 2013-1-30 14:07:41 | 显示全部楼层

非常感谢解答哦。新年快乐吖
原帖由 licess 于 2013-1-30 13:35 发表
server
        {
                listen       80;
                server_name www.example.org;
                index index.html index.htm index.php;
                root  /home/wwwroot;

              ...

军哥运维代购:http://shop63846532.taobao.com/

 楼主| 发表于 2013-1-30 15:56:24 | 显示全部楼层

我想在问下。这样设置后,想让访问ip的强制转跳到域名是不是不能在nginx.conf理设置了?
原帖由 licess 于 2013-1-30 13:35 发表

server
        {
                listen       80;
                server_name www.example.org;
                index index.html index.htm index.php;
                root  /home/wwwroot;

              ...
发表于 2013-1-30 21:59:51 | 显示全部楼层

这样改就OK了。


server {
    listen       80;
    server_name  www.example.org  example.org;
    if ($http_host != www.example.org) {
        rewrite  (.*)  http://www.example.org$1;
    }
    ...
}

意思是不等于www的就跳到 www的上面去。 无论是IP或是其它的
美国VPS推荐: 遨游主机LinodeLOCVPS主机云搬瓦工80VPSVultr美国VPS主机中国VPS推荐: 阿里云腾讯云。LNMP付费服务(代装/问题排查)QQ 503228080
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|VPS侦探 ( 鲁ICP备16040043号-1 )

GMT+8, 2024-11-17 00:05 , Processed in 0.027543 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表