nginx的基本使用
- 1.搭建一个静态的web服务器
- 2.搭建一个动态的web服务器
- 3.反向代理
实验环境
我这里使用virtualbox虚拟机
网上下好centos7的系统镜像,在虚拟机器上安装centos7系统,确保在系统上可以上网,这里推荐使用桥接模式。
centos7系统
确保可以连上外网
使用终端软件连接上虚拟机,我这里使用iterm,类似的xshell也可以。
先使用ip addr 命令查看虚拟机centos7的内网ip
然后使用终端软件连接:ssh 用户名@ip,我这里设置了ssh公私钥登录所以不用输入密码,直接输入密码也可。
安装 nginx
最简单的安装方法是直接yum安装nginx,但是centos7默认没有nginx的yum安装源,所以第一步先配置nginx的安装源
在 /etc/yum.repos.d/目录下创建nginx.repo文件,直接vi /etc/yum.repos.d/nginx.repo
输入以下内容,然后wq退出。
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
接下来就就可以直接yum安装nginx了:
yum install nginx
查看nginx版本,这样nginx就安装好了
nginx-搭建一个静态的web服务器
nginx通过修改其配置文件来配置服务,通常默认安装配置文件是在/etc/nginx/nginx.conf,可以使用rpm -ql nginx| grep conf
命令查看
搭建一个简单的nginx的静态服务器,可以通过在配置文件中的http块加入对应的server块搭建一个虚拟的web服务器。
server {
listen 8000;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
listen
表示监听在本地的8000端口, location /
表示匹配任意路径,root
表示文件的根目录,系统会从root目录开始查找文件,index
是默认返回的文件,所以我们访问服务器的8000端口的时候,会返回/usr/share/nginx/html/index.html
文件的内容。
我们可以先看下/usr/share/nginx/html/index.html文件里面都是些什么(内容可以自己设置):
nginx常用命令如下:
- 启动:nginx
- 停止:nginx -s stop
- 重启:nginx -s reload
通常修改完nginx配置需要重启nginx配置才会生效,第一次直接使用nginx命令开启服务器,系统没有报错说明配置没有语法错误,已经成功启动了。
这里这里使用netstat命令查看tcp端口情况,netstat工具需要自己安装,可以看到我们配置的nginx虚拟服务器监听在8000端口,服务已经开启。
然后我们直接在浏览器上访问虚拟机服务器的的8000端口
可以看到成功返回我们的页面信息,我们可以在root下放不同的静态文件,通过不同url请求就可以返回不同的界面来,这就完成通过nginx搭建一个静态的web服务器。
tip: 如果浏览器无法访问,可能是你的的centos系统的防火墙没关。
nginx-搭建一个动态的web服务器
所谓静态和动态的区别不在于页面内容是不是真的能动,而是在静态网页
的内容是预先确定的,每一个页面都是网站管理员生成页面时通过读取数据库生成的一个文件(通常以htm、html、shtml等形式为后缀),该网页以文件的形式存储在Web服务器或者本地计算机/服务器之上。网页内容一经发布到网页服务器上,无论是否有用户访问,每个静态网页的内容都是保存在网站服务器上的。也就是说静态网页是实实在在保存在服务器上的文件,每个网页都是一个独立的文件,内容相对稳定。动态网页
取决于由用户提供的参数,并随着用户的访问实时读取存储在数据库中的数据中创建页面。也就是说,动态页并没有以文件的形式存储到web服务器上。
我们同样在/usr/share/nginx/html/index.html配置文件的http块中加入以下的server块,这里add_header的意思是在返回响应中添加Content-Type "text/plain;charset=utf-8"字段,浏览器就知道下面返回的数据是直接显示在浏览器界面中,不加这一句的话,下面的信息会以文件的形式下载下来。return 后面是我们返回的信息,200的是状态码,$remote_addr是nginx的内置变量,代表来客户端的ip。
server {
listen 8001;
location / {
add_header Content-Type "text/plain;charset=utf-8";
return 200 "Your IP Address:$remote_addr";
}
}
然后重启nginx,可以看到8001端口已经在监听了。
浏览器访问服务器的8001端口。
可以看到页面上已经显示来客户端的ip,而且这个ip的值不同用户访问显示的内容不同,也正是动态的概念所在,这就实现来一个简单的动态网页。
nginx-反向代理
nginx还要很重要的功能是就是反向代理,很多网站也是使用nginx代理后端的服务器,例如我的一个php网站监听在9999端口,使用nginx来反向代理到php的9999端口。就可以通过访问nginx监听的端口来获取php服务器的数据。nginx的反向代理主要是为了实现负载均衡(如果你有多个源站的话)以及访问控制等。
在nginx配置文件的http块中加入以下内容
server {
listen 8002;
location / {
proxy_pass http://www.baidu.com;
}
}
通过proxy_pass实现反向代理,我们监听的是8002端口,代理到百度的首页
重启nginx,查看nginx服务
访问服务器的8002端口,可以看到nginx已经代理到百度的首页,这就是所谓的反向代理。如果我们要代理到我们的服务器,而我们的服务器有多个地址,这时nginx会用到upstream字段,来配置代理到后端的轮询或是hash的规则,达到一个负载均衡的效果。