server {
server_name www.example.com;
rewrite ^ $scheme://example.com$request_uri permanent;
# permanent sends a 301 redirect whereas redirect sends a 302 temporary redirect
# $scheme uses http or https accordingly
}
server {
server_name example.com;
# the rest of your config goes here
}
当请求来到 example.com 时,不使用 if 语句来提高性能。它使用 $request_uri 而不是必须创建一个 $1 匹配来对重写征税(请参阅 Nginx Common Pitfalls 页面)。
server {
#listen 80 is default
server_name www.example.com;
return 301 $scheme://example.com$request_uri;
}
server {
#listen 80 is default
server_name example.com;
## here goes the rest of your conf...
}
因为我的回答是得到越来越多的赞成票,但以上也是如此。你不应该rewrite在这种情况下使用 a 。为什么?因为 nginx 必须处理并开始搜索。如果您使用return(应该在任何 nginx 版本中都可用),它会直接停止执行。这在任何情况下都是首选。
server {
listen 80;
server_name www.example.com;
rewrite ^ http://example.com$uri permanent;
}
# the server directive is nginx's virtual host directive.
server {
# port to listen on. Can also be set to an IP:PORT
listen 80;
# Set the charset
charset utf-8;
# Set the max size for file uploads to 10Mb
client_max_body_size 10M;
# sets the domain[s] that this vhost server requests for
server_name example.com;
# doc root
root /var/www/example.com;
# vhost specific access log
access_log /var/log/nginx_access.log main;
# set vary to off to avoid duplicate headers
gzip off;
gzip_vary off;
# Set image format types to expire in a very long time
location ~* ^.+\.(jpg|jpeg|gif|png|ico)$ {
access_log off;
expires max;
}
# Set css and js to expire in a very long time
location ~* ^.+\.(css|js)$ {
access_log off;
expires max;
}
# Catchall for everything else
location / {
root /var/www/example.com;
access_log off;
index index.html;
expires 1d;
if (-f $request_filename) {
break;
}
}
}
我还在 Nginx wiki 和其他博客上查看了这一点,性能方面的最佳方法是执行以下操作:
使用 nginx(撰写本文时版本 1.0.12)从 www.example.com 重定向到 example.com。
当请求来到 example.com 时,不使用 if 语句来提高性能。它使用 $request_uri 而不是必须创建一个 $1 匹配来对重写征税(请参阅 Nginx Common Pitfalls 页面)。
资料来源:
请在 SO 中访问此问题:https ://stackoverflow.com/a/11733363/846634
从更好的答案:
其实你甚至不需要重写。
因为我的回答是得到越来越多的赞成票,但以上也是如此。你不应该
rewrite
在这种情况下使用 a 。为什么?因为 nginx 必须处理并开始搜索。如果您使用return
(应该在任何 nginx 版本中都可用),它会直接停止执行。这在任何情况下都是首选。经过一番挖掘和一些失误,这里是解决方案。我遇到的问题是确保使用“ http://example.com $uri”。在 $uri 前面插入 / 会导致重定向到http://example.com//
要重定向到非 www,请修改 vhost 文件:
“永久”将重定向转换为 301 重定向。在此代码块之后,您可以在没有 www 的情况下配置域。
用于将非 www 重定向到 www:
萨西特。
顺便说一句,要使用 Nginx 进行完整的 VPS 设置,请查看我的网站 guvnr.com 上的 VPS 圣经,我希望这很方便!
这就是我使用的: