一、概述
Nginx的特性:
- 反向代理
- 正向代理:在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问。
- 反向代理
- 反向代理,客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。
- 负载均衡
- 单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡
- 动静分离
- 为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。
二、Nginx安装
安装相关依赖
gcc
pcre
openssl
zlib
命令
yum install gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
查看安装是否成功
pcre-config --version
安装Nginx
① 下载nginx,两种方式
a. 直接下载
.tar.gz
安装包,地址:https://nginx.org/en/download.htmlb. 使用
wget
命令下载(推荐)。确保系统已经安装了wget,如果没有安装,执行 yum install wget 安装。
wget -c https://nginx.org/download/nginx-1.19.0.tar.gz
② 解压、进入目录:
tar -zxvf nginx-1.19.0.tar.gz
cd nginx-1.19.0
③ 配置:
其实在 nginx-1.12.0 版本中你就不需要去配置相关东西,默认就可以了。当然,如果你要自己配置目录也是可以的。
1.使用默认配置
./configure
2.自定义配置(不推荐)
$ ./configure \
--prefix=/usr/local/nginx \
--conf-path=/usr/local/nginx/conf/nginx.conf \
--pid-path=/usr/local/nginx/conf/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi
注:将临时文件目录指定为/var/temp/nginx,需要在/var下创建temp及nginx目录
④ 编辑安装
make && make install
在安装之后,在/usr/local文件夹下会有一个nginx文件夹。
查看版本号(使用nginx操作命令前提条件:必须进入nginx的目录/usr/local/nginx/sbin
.)
./nginx -v
查找安装路径:
whereis nginx
⑤ 启动,停止nginx
# 进入Nginx目录
cd /usr/local/nginx/sbin/
# 启动Nginx
./nginx
# 停止Nginx
./nginx -s stop
./nginx -s quit
# 重新加载Nginx
./nginx -s reload
查询nginx进程:
ps aux|grep nginx
启动之后用浏览器访问服务器的IP地址就可以看到Nginx了。
查看防火墙开放的端口:
firewall-cmd --list-all
设置开放的端口号:
sudo firewall cmd --add-port=80/tcp --permanent
防火墙:
systemctl start firewalld.service 启动
systemctl enable firewalld.service 开机启动
systemctl stop firewalld.service 停止
systemctl disable firewalld.service 禁止开机启动
systemctl status firewalld.service 查看状态
firewall-cmd --state 查看状态
三、Nginx常用命令
要进入Nginx的目录才能使用Nginx的命令,Nginx目录:/usr/local/nginx/sbin
-
查看Nginx版本号
./nginx -v
-
启动Nginx
./nginx
-
重加载配置文件,不用重启Nginx
./nginx -s reload
四、Nginx的配置文件
配置文件的位置:/usr/local/nginx/conf/nginx.conf
Nginx的配置文件有三部分:
- 全局块
- Events块
- Http块
全局块:
- 从配置文件开始到events之前的内容,主要会设置一些影响Nginx服务器整体运行的命令配置指令。
- 例如:
worker_processes 1;
表示Nginx处理并发的数量。
Events块:
- Events块设计的指令主要影响Nginx服务器与用户的网络连接。
- 例如:
worker_connections 1024;
表示Nginx支持的最大连接数。
Http块:
- Http块又包括Http全局块和Server块。
- Http全局块的指令包括:文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接请求数上限等。
五、Nginx配置反向代理
5.1. 反向代理1
目的:实现在浏览器中输入www.123.com跳转到服务器的Tomcat主页。
5.1.1. 准备工作
准备工作:
安装jdk
安装、启动Tomcat
安装JDK
sudo yum install java-1.8.0
查看Java版本
java -version
下载Tomcat(直接下载很慢的,可以把安装包下载下来再放到服务器上)
wget https://downloads.apache.org/tomcat/tomcat-7/v7.0.107/bin/apache-tomcat-7.0.107.tar.gz
在/usr/local目录下新建tomcat文件夹
cd /usr/local
mkdir tomcat
返回到Tomcat压缩包的下载目录,解压压缩文件到tomcat文件夹下
sudo tar -zxvf apache-tomcat-7.0.107.tar.gz -C /usr/local/tomcat
进入到 Tomcat 的命令目录
cd /usr/local/tomcat/apache-tomcat-7.0.107/bin
启动tomcat
./startup.sh
对外开放访问端口(防火墙如果已经关闭就不用了)
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
在浏览器访问服务器ip:8080
如果是使用的阿里云等服务器,访问不了可以在cmd中输入命令telnet 服务器ip 端口
,如果无法连同,说明端口没有开,可能是实例安全组没有配置开放这个端口。
5.1.2. 配置
在windows系统的host文件进行域名和ip对应关系的配置。
host文件存放目录:C:\Windows\System32\drivers\etc
用编辑器打开host文件,将ip地址和url放到文件中,如果hosts文件无法编辑,去修改一下权限,或者看一下文件是不是只读的。
修改权限参考:https://jingyan.baidu.com/article/624e7459b194f134e8ba5a8e.html
这时候在浏览器访问www.123.com:8080可以访问到Tomcat,但是我们的目的是使用www.123.com就可以直接访问Tomcat。所以继续配置。
在Nginx中配置反向代理
将server中的server_name改为我们的服务器IP(原来的server_name是localhost)
在server的location部分,在root和index之间加上如下内容:
proxy_pass http://127.0.0.1:8080;
启动Nginx或重新加载配置文件。
在浏览器输入www.123.com
来访问。
就可以访问了!
5.2. 反向代理2
目的:当访问服务器ip:9001/edu/
,跳转到8080端口,当访问服务器ip:9001/vod/
,跳转到8081端口。
5.2.1. 准备工作
在反向代理1的基础上,还要准备另一个tomcat
再创建一个tomcat02目录,将之前下载的tomcat解压到tomcat02目录中去。
tomcat02目录也是新建在了/usr/local/下。
mkdir tomcat02
解压
sudo tar -zxvf apache-tomcat-7.0.107.tar.gz -C /usr/local/tomcat02
进入tomcat02下的tomcat目录
cd /usr/local/tomcat02/apache-tomcat-7.0.107
要修改这个tomcat的几个端口,配置文件在conf/server.xml中
vim conf/server.xml
修改8005为8015,8080为8081
保存退出后,启动tomcat
cd bin
./startup.sh
在浏览器输入服务器ip:8080
和服务器ip:8081
看看是否都可以访问到tomcat,注意8081的端口是否开启了。
在tomcat目录的apache-tomcat-7.0.107下的webapps下,新建文件夹edu
cd /usr/local/tomcat/apache-tomcat-7.0.107/webapps
mkdir edu
cd edu
vim a.html
在a.html输入如下内容
edu:8080
hello!
保存退出
在浏览器访问服务器ip:8080/edu/a.html
查看效果
同样的方式在tomcat02下也新建这样一个页面
cd /usr/local/tomcat02/apache-tomcat-7.0.107/webapps
mkdir vod
cd vod
vim a.html
在a.html输入如下内容
vod:8081
hello!
保存退出
在浏览器访问服务器ip:8081/vod/a.html
查看效果
5.2.2. 配置
Nginx的配置文件目录为/usr/local/nginx/conf
cd /usr/local/nginx/conf
vim nginx.conf
在配置文件的最后一个}
前加上如下内容,要替换成自己的服务器IP
server {
listen 9001;
server_name 服务器ip;
location ~/edu/{
proxy_pass http://127.0.0.1:8080;
}
location ~/vod/{
proxy_pass http://127.0.0.1:8081;
}
}
启动Nginx或重新加载配置文件,注意9001端口要开放。
最后访问服务器IP:9001/edu/a.html
和服务器IP:9001/vod/a.html
六、Nginx配置负载均衡
目的:访问服务器IP/edu/a.html
的时候,实现负载均衡效果,使访问平均到8080和8081端口去。
6.1. 准备工作
还是需要两个Tomcat,这两个Tomcat的webapps下都要有edu目录,edu下存放一个a.html页面。
在前面的基础上,我们只需要在tomcat02中的webapps文件下新建edu目录和a.html文件即可。
cd /usr/local/tomcat02/apache-tomcat-7.0.107/webapps
mkdir edu
cd vod
cp a.html ../edu
进入到edu下查看是否有a.html文件。
cd ../edu
ls
可以修改一下这个a.html文件的内容。
6.2. 配置
进入到Nginx的配置文件
cd /usr/local/nginx/conf
vim nginx.conf
首先,在http块中,加入如下内容
upstream MyTomcatServer {
server 118.31.45.92:8080;
server 118.31.45.92:8081;
}
再将server中的server_name改为服务器的IP地址
最后在location的root和index之间加上一行proxy_pass http://MyTomcatServer;
这里的MyTomcatServer是在http中配置的,是刚刚填写的upstream后面的内容。
然后退出保存,重新载入Nginx配置文件。
在浏览器访问http://服务器IP/edu/a.html
,然后不断刷新这个页面,会发现页面在Tomcat和Tomcat02的两个edu/a.html之间跳转。
七、Nginx配置动静分离
Nginx动静分离简单来说就是把动态请求和静态请求分开。
7.1. 准备工作
在Linux系统中准备一些静态资源。在任意位置新建目录rm_test,在这个目录下新建两个文件夹page和pic。在page文件夹下放一些Html页面,在pic文件夹下放一些图片,可以使用Xshell的Xftp工具来拖动文件。
在page文件下,我放置了a.html;在pic文件夹下,放置了1.jpg和2.jpg。
7.2. 配置
在Nginx配置文件中配置。
先把server的server_name改成服务器的IP。
然后在server_name下面的location后加上目录page,root填写为rm_test。(不要写反了)
在location下再写一个location,内容如下:
也可以在第二个root下面再加一行autoindex on;
保存退出,重新加载配置文件。
用浏览器访问:http://服务器IP/page/a.html
,查看效果:
访问http://服务器IP/pic/1.jpg
,查看效果
如果配置了刚刚的autoindex on;,访问http://服务器IP/pic
可查看到如下效果: