首先搭建环境:安装ubuntu,然后安装vmware tools,安装vmware tools的时候要先在虚拟机某个地方新建一个目录,然后把所以tools的文件复制过去,然后解压安装。直接解压会提示read-only file system。准备两台充当服务器的电脑,让三个电脑处于一个局域网内,并通过ipconfig找到三个主机的局域网ip,把虚拟机的上网方式设置为桥接方式,这样虚拟机和其他主机的地位是相等的,相当于局域网中一台独立的主机。配置好相关的host,linux下hosts文件在/ec/hosts,window在windows/system32/driver/etc/hosts。配置hosts是为了通过域名访问服务器。
然后执行 apt-get install nginx,我安装的是1.4.6版本的。
安装完之后,在虚拟机输入localhost,见到welcome to nginx就代表成功了,然后开始做各种实验。
首先在虚拟机上尝试在一个服务器建立多个站点。这个类似apache,主要是配置好参数,然后服务器就会根据请求去获取相关文件夹的文件了。
在nginx的默认根目录下,我的是/usr/share/nginx/html,新建两个根目录,其实就是两个网站。分别叫cyb,zym ,然后放两个index.html作测试用。
在nginx.config下加以下代码
server {
listen 80;
server_name www.myserver.com;
error_page 404 /404.html;
error_page 500 503 504 /50x.html;
error_log /var/log/nginx/debug.log debug;
root html/cyb;
index index.html index.htm;
}
server {
listen 80;
server_name www.hello.com;
error_page 404 /404.html;
error_page 500 503 504 /50x.html;
error_log /var/log/nginx/debug.log debug;
root html/zym; //配置网站根目录
index index.html index.htm;
}
配置完后重启nginx,然后把起一个域名比如的起了一个是www.myserver.com,一个是www.hello.com,然后配置对应的ip是nginx所在机器的ip,然后通过域名访问,比如www.hello.com/index.html,这时候会返回对应的index.html,访问myserver的时候会访问另一个文件夹的index.html,这都是我们之前的配置文件里配置的。
然后再做一个实验,那就是反向代理和负载均衡。
反向代理大概意思就是浏览器去访问nginx,然后nginx再请求真正的服务器,而正向代理是处在客户端的,比如浏览器,我们通过正向代理去访问其他反向代理或服务器,负载均衡就是把访问某个域名的所有请求,相应地分流到该域名对应的多个服务器上,减少压力。
首先在两个充当服务器的机器上新建两个文件index.html,而且内容不一样,后面会说原因。
配置如下
upstream www.myserver.com{
server 192.168.0.104:80;
server 192.168.0.107:80;
}
upstream www.hello.com {
server 192.168.0.104:80;
server 192.168.0.107:80;
} //nginx代理的服务器配置,也就是真正的服务器地址
server {
listen 80;
server_name www.myserver.com;
error_page 404 /404.html;
location /{
proxy_pass http://www.myserver.com;//配置负载均衡对应的upstream
proxy_set_header X-Real-IP $remote_addr;
client_max_body_size 100m;
}
error_page 500 503 504 /50x.html;
error_log /var/log/nginx/debug.log debug;
index index.html index.htm;
}
server {
listen 80;
server_name www.hello.com;
error_page 404 /404.html;
location /{
proxy_pass http://www.hello.com;
proxy_set_header X-Real-IP $remote_addr;
client_max_body_size 100m;
}
error_page 500 503 504 /50x.html;
error_log /var/log/nginx/debug.log debug;
index index.html index.htm;
}
上面的代码意思是在一个nginx服务器上配置了多个网站,并且对每个网站都做了负载均衡处理,访问对应的域名时,nginx就会把请求发到该域名实际对应的服务器上面(通过upsteam配置),然后在upstream里还可以配置分流的规则,以上是轮询处理,就是第一个请求发到第一个ip,第二个请求发到第二个ip,第三个会发到第一个ip,以此类推,还可以根据ip分流等等。改好配置,重启nginx,然后在某个主机上访问某个域名,然后强制刷新,会看到不一样的页面,这就说明了我们每次请求都发到了不同的服务器。所以我们在两个服务器上新建两个名字一样内容不一样的文件,以便看到效果,看不到效果的时候,可以强制刷新浏览器,因为浏览器有缓存。
nginx很强大,可以充当正向代理,缓存服务器,还能通过cgi和php等通信等等 。后面有机会再慢慢探索。