`

Nginx多Server反向代理配置

 
阅读更多

Nginx强大的正则表达式支持,可以使server_name的配置变得很灵活,如果你要做多用户博客,那么每个用户拥有自己的二级域名也就很容易实现了。

 

下面我就来说说server_name的使用吧:

 

server_name的匹配顺序

 

Nginx中的server_name指令主要用于配置基于名称虚拟主机,server_name指令在接到请求后的匹配顺序分别为:

 

1、准确的server_name匹配,例如:

 

  1. server { 
  2. listen 80; 
  3. server_name ssdr.info www.ssdr.info; 
  4. ... 

 

2、以*通配符开始的字符串:

 

  1. server { 
  2. listen 80; 
  3. server_name *.ssdr.info; 
  4. ... 

 

3、以*通配符结束的字符串:

 

  1. server { 
  2. listen 80; 
  3. server_name www.*; 
  4. ... 

 

4、匹配正则表达式:

 

  1. server { 
  2. listen 80; 
  3. server_name ~^(?.+)\.howtocn\.org$; 
  4. ... 

 

Nginx将按照1,2,3,4的顺序对server name进行匹配,只有有一项匹配以后就会停止搜索,所以我们在使用这个指令的时候一定要分清楚它的匹配顺序(类似于location指令)。

 

server_name指令一项很实用的功能便是可以在使用正则表达式的捕获功能,这样可以尽量精简配置文件,毕竟太长的配置文件日常维护也很不方便。下面是2个具体的应用:

 

在一个server块中配置多个站点:

 

  1. server 
  2. listen 80; 
  3. server_name ~^(www\.)?(.+)$; 
  4. index index.php index.html; 
  5. root /data/wwwsite/$2; 

 

站点的主目录应该类似于这样的结构:

 

  1. /data/wwwsite/ssdr.info 
  2. /data/wwwsite/linuxtone.org 
  3. /data/wwwsite/baidu.com 
  4. /data/wwwsite/google.com 

 

这样就可以只使用一个server块来完成多个站点的配置。

 

在一个server块中为一个站点配置多个二级域名 。

 

实际网站目录结构中我们通常会为站点的二级域名独立创建一个目录,同样我们可以使用正则的捕获来实现在一个server块中配置多个二级域名:

 

  1. server 
  2. listen 80; 
  3. server_name ~^(.+)?\.howtocn\.org$; 
  4. index index.html; 
  5. if ($host = ssdr.info){ 
  6. rewrite ^ http://www.ssdr.info permanent; 
  7. root /data/wwwsite/ssdr.info/$1/; 

 

站点的目录结构应该如下:

 

  1. /data/wwwsite/ssdr.info/www/ 
  2. /data/wwwsite/ssdr.info/nginx/ 

 

这样访问www.ssdr.info时root目录为/data/wwwsite/ssdr.info/www/,nginx.ssdr.info时为/data/wwwsite/ssdr.info/nginx/,以此类推。

 

后面if语句的作用是将ssdr.info的方位重定向到www.ssdr.info,这样既解决了网站的主目录访问,又可以增加seo中对www.ssdr.info的域名权重。

 

多个正则表达式

 

如果你在server_name中用了正则,而下面的location字段又使用了正则匹配,这样将无法使用$1,$2这样的引用,解决方法是通过set指令将其赋值给一个命名的变量:

 

  1. server 
  2. listen 80; 
  3. server_name ~^(.+)?\.howtocn\.org$; 
  4. set $www_root $1; 
  5. root /data/wwwsite/ssdr.info/$www_root/; 
  6. location ~ .*\.php?$ { 
  7. fastcgi_pass 127.0.0.1:9000; 
  8. fastcgi_index index.php; 
  9. fastcgi_param SCRIPT_FILENAME /data/wwwsite/ssdr.info/$fastcgi_script_name; 
  10. include fastcgi_params; 

 

Nginx不同域名反向代理到另一台服务器 proxy_pass和$host

 

想让一个VPS专门做另一个VPS的前端,后端VPS每添加一个域名,前端VPS就要同时添加一个域名来反向代理,作为前端的VPS如果一个一个的 添加后端VPS的域名,那么这个事情特别麻烦,能不能让其自动反向代理后端VPS呢,用到proxy_pass和$host就可以轻松实现。

 

以下例子为了省事,以lnmp为安装环境进行设置

 

修改前端VPS的nginx.conf文件,修改成以下内容:

 

  1. server { 
  2. listen 80; 
  3. server_name $host; 
  4. location / { 
  5. proxy_pass http://www.31.gd/; 
  6. proxy_set_header Host $host; 
  7. proxy_redirect off; 
  8. proxy_set_header X-Real-IP $remote_addr; 
  9. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
  10. proxy_connect_timeout 60; 
  11. proxy_read_timeout 600; 
  12. proxy_send_timeout 600; 

 

下面的一并修改吧。

 

  1. location /.(php|php5)?$ 
  2. fastcgi_pass unix:/tmp/php-cgi.sock; 
  3. fastcgi_index index.php; 
  4. include fcgi.conf; 
  5. location /status { 
  6. stub_status on; 
  7. access_log off; 
  8. location /.(gif|jpg|jpeg|png|bmp|swf)$ 
  9. expires 30d; 
  10. location /.(js|css)?$ 
  11. expires 12h; 

 

这样就可以实现了前端VPS可以反向代理任意域名到后端VPS,只要将域名解析到前端VPS,后端VPS进行域名绑定,那么就可以直接访问到了

 

一台nginx带多个域名多个tomcat情况的配置

 

多个域名,其中2个域名需支持泛域名解析:

 

1、www.abc.com

 

2、www.bcd.com

 

3、*.efg.com

 

4、*.hij.com

 

其中1,2,3为一台tomcat,4为独立tomcat。前端一台nginx,通过配置多个虚拟主机来实现该部署。

 

进入/etc/nginx/conf.d目录,所有虚拟主机的配置文件都在该目录下存放,配置。

 

配置支持泛域名

 

  1. # A virtual host using mix of IP-, name-, and port-based configuration 
  2. server { 
  3. listen       81; 
  4. server_name  *.efg.com; 
  5. location / { 
  6. proxy_pass http://localhost:8080; 
  7. proxy_set_header   Host    $host; 
  8. proxy_set_header   X-Real-IP   $remote_addr; 
  9. proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for; 
  10. # A virtual host using mix of IP-, name-, and port-based configuration 
  11. server { 
  12. listen       81; 
  13. server_name  *.hij.com; 
  14. location / { 
  15. proxy_pass http://localhost:8081; 
  16. proxy_set_header   Host    $host; 
  17. proxy_set_header   X-Real-IP   $remote_addr; 
  18. proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for; 

 

泛域名解析关键为红色部分,如果没有红色部分,后端8080及8081口对应的tomcat虚拟主机将无法获得域名信息,导致后端tomcat无法获取到对应的域名信息。

 

后端TOMCAT支持泛域名解析时,需要设置 host name 为 localhost 以支持泛域名指向。

 

Nginx 多域名配置

 

nginx绑定多个域名可又把多个域名规则写一个配置文件里,也可又分别建立多个域名配置文件,我一般为了管理方便,每个域名建一个文件,有些同类域名也可又写在一个总的配置文件里。

 

一、每个域名一个文件的写法

 

首先打开 nginx域名配置文件存放目录:/usr/local/nginx/conf/servers ,如要绑定域名www.web126.com 则在此目录建一个文件:www.web126.com.conf 然后在此文件中写规则,如:

 

  1. server 
  2. listen       80; 
  3. server_name www.web126.com;             #绑定域名 
  4. index index.htm index.html index.php;      #默认文件 
  5. root /home/www/web126.com;               #网站根目录 
  6. include location.conf;                            #调用其他规则,也可去除 

 

然后重起nginx服务器,域名就绑定成功了。

 

Nginx服务器重起命令:/etc/init.d/nginx restart。

 

二、一个文件多个域名的写法

 

一个文件添加多个域名的规则也是一样,只要把上面单个域名重复写下来就ok了,如:

 

  1. server 
  2. listen       80; 
  3. server_name www.web126.com;             #绑定域名 
  4. index index.htm index.html index.php;      #默认文件 
  5. root /home/www/web126.com;               #网站根目录 
  6. include location.conf;                            #调用其他规则,也可去除 
  7. server 
  8. listen       80; 
  9. server_name msn.web126.com;             #绑定域名 
  10. index index.htm index.html index.php;      #默认文件 
  11. root /home/www/msn.web126.com;        #网站根目录 
  12. include location.conf;                            #调用其他规则,也可去除 

 

三、不带www的域名加301跳转

 

如果不带www的域名要加301跳转,那也是和绑定域名一样,先绑定不带www的域名,只是不用写网站目录,而是进行301跳转,如:

 

  1. server 
  2. listen 80; 
  3. server_name web126.com; 
  4. rewrite ^/(.*) http://www.web126.com/$1 permanent; 

 

四、添加404网页

 

添加404网页,都可又直接在里面添加,如:

 

  1. server 
  2. listen       80; 
  3. server_name www.web126.com;             #绑定域名 
  4. index index.htm index.html index.php;      #默认文件 
  5. root /home/www/web126.com;               #网站根目录 
  6. include location.conf;                            #调用其他规则,也可去除 
  7. error_page 404  /404.html; 

 

最后还有一个方法需要注意,可能有需要禁止IP直接访问80端口或者禁止非本站的域名绑定我们的IP,这样的话应该

 

如下处理,放到最前一个server上面即可:

 

  1. server{ 
  2. listen   80 default; 
  3. server_name      _; 
  4. return 403; 

学会上面四种规则方法,基本就可以自己独立解决nginx 多域名配置问题了

分享到:
评论

相关推荐

    nginx+tomcat反向代理安装配置

    下面我们将详细探讨`nginx1.6`的安装、`tomcat7`的安装以及它们之间的反向代理配置。 首先,让我们从`nginx1.6`的安装开始。安装过程通常包括以下几个步骤: 1. 下载最新稳定版的`nginx`安装包,对于`nginx1.6`,...

    Nginx反向代理服务器配置基础教程

    接下来可以通过修改`/etc/nginx/nginx.conf`文件来实现具体的反向代理配置。例如,可以通过添加`server`块来定义反向代理规则,指向后端的服务实例。此外,还可以根据实际需求调整日志级别、启用SSL等功能。

    nginx正向代理与反向代理详解

    在Nginx中配置反向代理,同样需要编辑配置文件,但这次我们将指定一个或多个内部服务器作为目标。例如,我们可以设置一个监听80端口的虚拟主机,将所有到达该主机的请求转发到8080端口上的某个服务器: ```nginx ...

    windows下配置nginx反向代理tomcat

    ### Windows 下配置 Nginx 反向代理 Tomcat 在 Windows 环境下配置 Nginx 作为 Tomcat 的反向代理服务器是一项常见的任务,主要用于实现负载均衡、提高安全性及提升性能等目的。本文将从下载 Nginx 开始,详细介绍...

    nginx实现Tomcat反向代理

    2. **配置Nginx**:在Nginx的配置文件(通常是`/etc/nginx/nginx.conf`或`/etc/nginx/sites-available/default`)中,我们需要创建一个新的虚拟主机或者在现有主机配置中添加反向代理规则。以下是一个简单的示例: ...

    Nginx1.2.7 for windows反向代理配置

    这种反向代理配置对于多服务器环境尤其有用,可以实现负载均衡,提升服务可用性,并且能够保护后端服务器免受直接攻击。同时,由于Nginx支持多种过滤和重写规则,还能实现更复杂的路由策略,如根据URL或HTTP头部信息...

    https通信nginx反向代理443端口

    本文将深入探讨如何通过Nginx配置HTTPS服务器,实现443端口的反向代理,以及与SSL连接相关的域名访问应用服务器的设置。 首先,我们需要了解HTTPS的基本原理。HTTPS是HTTP协议的安全版本,它通过添加SSL(Secure ...

    nginx配置反向代理

    【Nginx 配置反向代理】 在服务器运维中,遇到高并发访问的压力时,Apache 服务器可能无法单独应对。在这种情况下,可以利用 Nginx 的反向代理功能来分担压力,优化服务器架构。Nginx 以其轻量级、高性能的特点,常...

    nginx反向代理配置[借鉴].pdf

    总结,Nginx反向代理配置涉及多个方面,包括用户与组的创建、依赖库的安装、Nginx的编译与安装、配置文件的编写与优化等步骤。在实际操作中,应根据服务器的具体情况进行调整,以达到最佳的性能和稳定性。同时,监控...

    nginx反向代理配置及优化以及核心讲解以及高性能集群搭建

    在本文中,我们将深入探讨Nginx的反向代理配置、性能优化以及如何构建高性能集群。 ### 一、Nginx反向代理配置 反向代理是Nginx的核心功能之一,它充当服务器和客户端之间的中介。当用户请求到达Nginx时,Nginx会...

    Cobalt_Strike_C2隐匿多级nginx反向代理1

    在多级反向代理的场景中,请求会经过多个 Nginx 服务器,每级都指向下一个级别的服务器,最终达到目标 C2 服务器。 实施这种隐蔽策略的大致步骤如下: 1. 在第一层 Nginx 反向代理节点(例如:21.67.38.47)上配置...

    docker 安装 wordpress,通过nginx反向代理,绑定域名,配置https

    我们需要配置 Nginx 反向代理,以便访问 WordPress 站点。我们可以在 nginx.conf 文件中添加以下配置: ``` server { listen 80; server_name ikeguang.com; location / { proxy_pass http://localhost:8080; ...

    nginx反向代理配置实现

    本文将深入探讨如何利用Nginx实现反向代理,以及如何与Tomcat集成进行配置测试。Nginx以其高性能、轻量级的特性,常被用作反向代理服务器,而Tomcat则是一个广泛使用的Java应用服务器,两者结合可以提供稳定且高效的...

    一分钟搞定 Nginx反向代理 nginx域名代理

    nginx -s reload // 重新加载配置文件 nginx -s quit // 退出nginx nginx-1.3.9.zip(这个版本) (1分钟搞定只是夸张说法啦,给你增加信心的啦,真正的操作起来,因人而异,没搞定的耐心再试试,自己xp系统亲测成功...

    nginx 反向代理.docx

    **示例配置:** 下面是一个简单的Nginx反向代理配置示例,假设我们需要让`www.123.com`这个域名通过Nginx代理指向本地运行的Tomcat服务器: ```nginx server { listen 80; server_name www.123.com; location /...

    自动化Nginx服务器的反向代理的配置方法.pdf

    在IT行业中,自动化Nginx服务器的反向代理配置是一个高效的方法,特别是在处理分布式系统和服务导向架构时。本文档详细介绍了如何使用Nginx作为反向代理,以及如何通过自动化手段来管理和配置它,以便更好地集成和...

    nginx 负载均衡与反向代理资源

    2. **配置反向代理**:在`nginx.conf`中添加一个新的server块,设置监听端口,并配置proxy_pass指令指向后端服务器。例如: ``` server { listen 80; server_name example.com; location / { proxy_pass ...

    Nginx反向代理不能访问项目的解决办法

    首先,我们需要检查Nginx的配置文件(通常位于`/etc/nginx/nginx.conf`或`/etc/nginx/conf.d/default.conf`),确保其中的反向代理设置正确无误。 ### 示例配置文件分析: ```nginx http { include mime.types; ...

Global site tag (gtag.js) - Google Analytics