# 概述 一个网站往往是可以通过带 www 或不带 www 来访问,比如使用 xxy5.com 和 www.xxy5.com 都可以访问到本站,而为了更好的符合 SEO 的要求,往往是会做 301 跳转。同时一台服务器上经常也会配置多个站点,或者一个对外公开的用户可访问的网站,一个供开发使用的 api 接口站点等,这时就可以通过配置 Nginx 来实现这类需求 # 配置多站点(域名) ## 新建多站点配置文件 在服务器端进入 nginx 目录,具体目录位置视你安装 nginx 时的目录而定 ``` cd /usr/www/local/nginx ``` 在 nginx 目录下新建一个 vhost 目录,用来存在多站点的配置文件 ``` mkdir vhost ``` 新建 X 站点的配置文件 ``` vi x.conf ``` x.conf 内容如下: ``` server { listen 80; # 站点监听端口 server_name www.xxx.com ; # 站点域名 root /www/webA; # 站点存放目录 index index.html index.htm; #站点默认首页文件 } ``` 同理,再新建一个 Y 站点的配置文件 ``` vi y.conf ``` y.conf 内容如下: ``` server { listen 80; # 站点监听端口 server_name www.yyy.com ; # 站点域名 root /www/webA; # 站点存放目录 index index.html index.htm; #站点默认首页文件 } ``` 上述两个配置文件的内容,可以参考 nginx 默认 `nginx.conf` 文件中 server 部分的配置 ## 引入配置文件 最后在 nginx.conf 的 http块中引入上述配置文件,如图: ![](/public/uploads/2019/12/02/1575254826348396.jpg) ## 检查 nginx 配置文件是否正确 ``` nginx -t #如果有问题则定位出现在问题出现在哪里,没问题就继续后面的操作。 ``` ## 重启 nginx ```nginx ./nginx -s reload ``` # 设置 301 永久重定向 以前面 Y 站点为例 修改 y.conf 为: ``` server { listen 80; # 站点监听端口 server_name www.yyy.com, yyy.com; # 站点域名 root /www/webA; # 站点存放目录 index index.html index.htm; #站点默认首页文件 if ($host != 'www.yyy.com') { return 301 http://www.yyy.com$request_uri; } } ``` 301 重定向的方法有多种: 第一种:使用 rewrite 指令,通过正则匹配所有的 URI 后再去掉开头第一个 `/` (反斜线)。 ``` rewrite ^/(.*)$ https://www.xxy5.com/$1; ``` 第二种:同样使用 rewrite 指令,不同的是通过 `$request_uri` 变量匹配所有的URI。 ``` rewrite ^ https://www.xxy5.com$request_uri? permanent; ``` 这样写的好处是省去了去掉开头第一个反斜线的过程,正则匹配上性能更优。 第三种:使用 return 指令,通过 301 状态码和 `$request_uri` 参数,直接告诉 Nginx 这是个 301 重定向和抓取指定URI。 ``` return 301 https://www.xxy5.com$request_uri; ``` 这种方法是性能上最优的,因为 rewrite 指令有很多写法和规则,执行完所有正则匹配后,Nginx 才会知道这是一个 301 永久重定向。 > 301 重定向同样适用于跳转 https # Nginx 反向代理 重新编辑 x.conf 文件 ``` server { listen 80; server_name www.xxx.com; # 反向代理 # 代理到 URL:http://127.0.0.1 location / { proxy_pass http://127.0.0.1:8888; } } ``` > 在 Nginx 中配置 proxy_pass 代理转发时,如果在 proxy_pass 后面的 url 加 `/`,表示绝对根路径;如果没有 `/`,表示相对路径,把匹配的路径部分也给代理走。 ------------ > 对 Nginx 做了任何设置之后,都需要重启 Nginx 才会生效!!!