Nginx 使用多个.conf文件配置多个虚拟主机server的方法

Nginx 使用多个.conf文件配置多个虚拟主机server的方法,第1张

一般Nginx的配置都默认在 /usr/local/etc/nginx/nginx.conf 里,但是如果我们有多个虚拟主机需要配置的话,全部写在 nginx.conf 下会很臃肿,因此呢, Nginx 提供 include 包含其他配置文件的方式帮助我们解决这个问题,接下来我们就来看看具体怎么配置

安装好 Nginx 后,其默认配置文件不需要更改,它已经帮我们导入了其他配置文件的目录,如上图,最后一句 include servers/*,意思就是该配置文件包含 nginx.conf 的同级目录下的 servers 文件夹下所有的文件,这时候我们只需要在 nginx.conf 的同级目录下创建一个 servers 的文件夹,然后创建自己的 .conf 文件就行,当然,如果你的配置文件是其他目录,就修改 include 后的路径就可以

xxx.conf 中的只需要写 server 块就行,其实就相当于把这个 server 块添加到 nginx.conf 中的 http 块中

重启 nginx

sudo nginx -s reload

在/etc/nginx/下建一个文件夹放站点的配置文件,如example 地址是:/etc/nginx/example

在example文件夹里建多个站点的conf文件,如:example1.conf , example2.conf

每个conf配置文件如下,可修改server_name 和 location地址设置多个站点。

server {

listen 80

server_name michaelaschmidt.com www.michaelaschmidt.com

access_log /var/www/access_michaelaschmidt.log

location / {

root /var/www/michaelaschmidt.com

index index.php index.html index.htm

}

error_page 500 502 503 504 /50x.html

location = /50x.html {

root /usr/share/nginx/html

}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

location ~ /.php$ {

fastcgi_pass 127.0.0.1:9000

fastcgi_index index.php

fastcgi_param SCRIPT_FILENAME /var/www/michaelaschmidt.com/$fastcgi_script_name

includefastcgi_params

}

location ~ //.ht {

deny all

}

}

保存后在/etc/nginx/nginx.conf里面的http{} 里面加入:

include /etc/nginx/example/*.conf #将example文件夹下的所有.conf包含入nginx.conf配置文件

最后记得重启nginx:

/etc/init.d/nginx restart

nginx这个轻量级、高性能的webserver主要可以干两件事情:〉直接作为httpserver(代替apache,对PHP需要FastCGI处理器支持);〉另外一个功能就是作为反向代理服务器实现负载均衡以下我们就来举例说明如何使用nginx实现负载均衡。因为nginx在处理并发方面的优势,现在这个应用非常常见。当然了Apache的mod_proxy和mod_cache结合使用也可以实现对多台appserver的反向代理和负载均衡,但是在并发处理方面apache还是没有nginx擅长。1)环境:a.我们本地是Windows系统,然后使用VirutalBox安装一个虚拟的Linux系统。在本地的Windows系统上分别安装nginx(侦听8080端口)和apache(侦听80端口)。在虚拟的Linux系统上安装apache(侦听80端口)。这样我们相当于拥有了1台nginx在前端作为反向代理服务器;后面有2台apache作为应用程序服务器(可以看作是小型的servercluster。-));b.nginx用来作为反向代理服务器,放置到两台apache之前,作为用户访问的入口;nginx仅仅处理静态页面,动态的页面(php请求)统统都交付给后台的两台apache来处理。也就是说,可以把我们网站的静态页面或者文件放置到nginx的目录下;动态的页面和数据库访问都保留到后台的apache服务器上。c.如下介绍两种方法实现servercluster的负载均衡。我们假设前端nginx(为127.0.0.1:80)仅仅包含一个静态页面index.html;后台的两个apache服务器(分别为localhost:80和158.37.70.143:80),一台根目录放置phpMyAdmin文件夹和test.php(里面测试代码为print“server1“),另一台根目录仅仅放置一个test.php(里面测试代码为print“server2“)。2)针对不同请求的负载均衡:a.在最简单地构建反向代理的时候(nginx仅仅处理静态不处理动态内容,动态内容交给后台的apacheserver来处理),我们具体的设置为:在nginx.conf中修改:复制代码代码如下:location~\.php${proxy_pass158.37.70.143:80}〉这样当客户端访问localhost:8080/index.html的时候,前端的nginx会自动进行响应;〉当用户访问localhost:8080/test.php的时候(这个时候nginx目录下根本就没有该文件),但是通过上面的设置location~\.php$(表示正则表达式匹配以.php结尾的文件,详情参看location是如何定义和匹配的,最前端的nginx直接进行响应;〉如果用户访问test.php页面的话,158.37.70.143:80的Apache进行响应;〉如果用户访问目录phpMyAdmin下的页面的话,127.0.0.1:80的Apache进行响应;3)访问同一页面的负载均衡:即用户访问6访问第二个。另外还可以定义max_fails和fail_timeout等参数。综上,我们使用nginx的反向代理服务器reverseproxyserver的功能,将其布置到多台apacheserver的前端。nginx仅仅用来处理静态页面响应和动态请求的代理pass,后台的apacheserver作为appserver来对前台pass过来的动态页面进行处理并返回给nginx。通过以上的架构,我们可以实现nginx和多台apache构成的机群cluster的负载均衡。两种均衡:1)可以在nginx中定义访问不同的内容,代理到不同的后台server;如上例子中的访问phpMyAdmin目录代理到第一台server上;访问test.php代理到第二台server上;2)可以在nginx中定义访问同一页面,均衡(当然如果服务器性能不同可以定义权重来均衡)地代理到不同的后台server上。如上的例子访问test.php页面,会均衡地代理到server1或者server2上。实际应用中,server1和server2上分别保留相同的app程序和数据,需要考虑两者的数据同步。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11419826.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存