wozhidao 发表于 2013-1-30 09:19:01

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

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


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

server {
    listen       80;
    server_namewww.example.org;
    ...
}


网络上搜的都是上面那种301.我想用下面那种方法做301转跳。我只绑定了一个域名,nginx.conf里怎么配置啊?/home/wwwroot/放在上面的server还是下面的?能否给个例子?

licess 发表于 2013-1-30 09:57:25

你给的方法已经很详细了
你发的就是一个例子,你域名是什么就改改域名对应的配置文件就行

wozhidao 发表于 2013-1-30 11:22:11

userwww www;

worker_processes 1;

error_log/home/wwwlogs/nginx_error.logcrit;

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_typeapplication/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_length1k;
                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_zonecrawler$binary_remote_addr10m;

                #log format
                log_formataccess'$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_namewww.example.org;
   ...
}


                location ~ .*\.(php|php5)?$
                        {
                              try_files $uri =404;
                              fastcgi_passunix:/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.logaccess;
      }
include vhost/*.conf;
}


是不是这样就可以了?那别人访问我vpsip的时候是不是也会强制跳转到域名?

licess 发表于 2013-1-30 13:35:00

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

                location ~ .*\.(php|php5)?$
                        {
                              try_files $uri =404;
                              fastcgi_passunix:/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.logaccess;
      }
server {
    listen       80;
    server_nameexample.org;
    return       301 http://www.example.org$request_uri;
}
include vhost/*.conf;
}如果要其他的域名也调整只能采取if判断

wozhidao 发表于 2013-1-30 14:07:41

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

            ...

wozhidao 发表于 2013-1-30 15:56:24

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

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

            ...

id886 发表于 2013-1-30 21:59:51

这样改就OK了。


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

意思是不等于www的就跳到 www的上面去。 无论是IP或是其它的
页: [1]
查看完整版本: 301不是判断if ($host != 这种转跳怎么设置?