Nginx是一个高性能的HTTP和反向代理服务器。
Nginx官网:http://nginx.org/en/docs/
反向代理的概念
举例说明
打工人张三没时间找房,房东王五社恐不愿与陌生人打交道,于是乎,房屋中介应运而生。
张三委托房屋中介李四为自己寻找住房,房东王五授权房屋中介李四带看,两者的问题迎刃而解。
这里的房屋中介就是一种代理。
在代理中,分为3个角色,客户端、代理服务器和服务端。并且针对被代理的角色不同,又分为正向代理和反向代理。
正向代理:被代理的对象是客户端。张三发起看房需求,属于客户端。
反向代理:被代理的对象是服务端。王五提供住房资源,属于服务端。
正向代理使用场景:
反向代理使用场景:
1、安装依赖
yum install -y gcc gcc-c++ make libtool wget pcre pcre-devel zlib zlib-devel openssl openssl-devel
2、nginx下载
wget http://nginx.org/download/nginx-1.18.0.tar.gz
3、Nginx解压
tar -zxvf nginx-1.18.0.tar.gz
4、Nginx安装
cd nginx-1.18.0
./configure
make && make install
5、注意:安装完成后的路径为:/usr/local/nginx
6、Nginx命令
- 普通启动服务:/usr/local/nginx/sbin/nginx
- 配置文件启动:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
- 暴力停止服务:/usr/local/nginx/sbin/nginx -s stop
- 优雅停止服务:/usr/local/nginx/sbin/nginx -s quit
- 检查配置文件:/usr/local/nginx/sbin/nginx -t
- 重新加载配置:/usr/local/nginx/sbin/nginx -s reload
- 查看相关进程:ps -ef | grep nginx
7、开放防火墙
[root@caochenlei ~]# /sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
[root@caochenlei ~]# /etc/rc.d/init.d/iptables save
iptables:将防火墙规则保存到 /etc/sysconfig/iptables:[确定]
**实现效果:**打开浏览器,在浏览器地址栏输入地址:http://www.123.com,跳转到Liunx系统Tomcat主页面中。
实现思路
实现步骤
1、修改Windows中的hosts域名映射
复制“C:\Windows\System32\drivers\etc\hosts”到桌面,右键记事本打开,在里边加上以下代码保存,然后再复制回去,不要直接修改,会不让保存!
#虚拟机域名 映射的域名地址
192.168.206.128 www.123.com
2、修改Nginx中的配置文件并启动
[root@caochenlei ~]# vi /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name 192.168.206.128;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http:127.0.0.1:8080;
root html;
index index.html index.htm;
}
[root@caochenlei ~]# /usr/local/nginx/sbin/nginx
3、下载Tomcat、解压Tomcat、安装Tomcat、启动Tomcat
解压:
[root@caochenlei ~]# tar -zxvf apache-tomcat-7.0.105.tar.gz
安装:
[root@caochenlei ~]# mv apache-tomcat-7.0.105 /usr/local/tomcat
启动:
[root@caochenlei ~]# /usr/local/tomcat/bin/startup.sh
添加到防火墙:
[root@caochenlei ~]# /sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
[root@caochenlei ~]# /etc/rc.d/init.d/iptables save
如果关闭请用:
[root@caochenlei ~]# /usr/local/tomcat/bin/shutdown.sh
3.2.4、关闭服务
[root@caochenlei ~]# /usr/local/nginx/sbin/nginx -s quit
[root@caochenlei ~]# /usr/local/tomcat/bin/shutdown.sh
实现效果: 打开浏览器,在浏览器地址栏输入地址:http://192.168.206.128/edu/a.html,跳转到8080端口;输入http://192.168.206.128/edu/a.html,跳转到8080端口;
实现思路
修改nginx配置根据路由前缀进行相应端口转发
实现步骤
1、修改Nginx的配置文件,然后启动
[root@caochenlei ~]# vi /usr/local/nginx/conf/nginx.conf
分支server {
listen 80;
server_name 192.168.206.128;
#charset koi8-r;
#access_log logs/host.access.log main;
location ~ /edu/ {
proxy_pass http://127.0.0.1:8080;
}
location ~ /vod/ {
proxy_pass http://127.0.0.1:8081;
}
[root@caochenlei ~]# /usr/local/nginx/sbin/nginx
2、在Tomcat2的webapps文件夹中,创建一个edu文件夹,在里边创建a.html,并启动
[root@caochenlei ~]# mkdir -p /usr/local/tomcat2/webapps/edu
[root@caochenlei ~]# echo "<h1>This is 8081 Port</h1>" > /usr/local/tomcat2/webapps/edu/a.html
[root@caochenlei ~]# /usr/local/tomcat1/bin/startup.sh
[root@caochenlei ~]# /usr/local/tomcat2/bin/startup.sh
目的: 将动态请求和静态请求分开。Nginx处理静态页面;tomcat处理动态页面;两种方式,一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,另外一种是动态和静态文件混合发布,通过Nginx进行区分
实现效果
当请求进来,区分是静态请求还是动态请求,如果是静态请求就发到静态文件中去,动态的就还是默认取tomcat下的webapps
实现思路
实现步骤
1、创建静态资源文件,为了对比,Tomcat中也放一个
[root@caochenlei ~]# mkdir -p /data/www/
[root@caochenlei ~]# mkdir -p /usr/local/tomcat/webapps/ROOT/www
[root@caochenlei ~]# echo "\<h1>/data/www/a.html</h1>" > /data/www/a.html
[root@caochenlei ~]# echo "\<h1>/usr/local/tomcat/webapps/ROOT/www/a.html\</h1>" > /usr/local/tomcat/webapps/ROOT/www/a.html
2、修改Nginx的配置文件
[root@caochenlei ~]# vi /usr/local/nginx/conf/nginx.confserver {
listen 80;
server_name 192.168.206.128;
#charset koi8-r;
#access_log logs/host.access.log main;
location /www/ {
root /data/;
index index.html index.htm;
}
[root@caochenlei ~]# /usr/local/nginx/sbin/nginx
3、启动tomcat
[root@caochenlei ~]# /usr/local/tomcat/bin/startup.sh
4、页面访问:192.168.206.128,请求去到了静态文件
采用的是一主一备的模式,当主节点Nginx挂掉,备份服务器Nginx立刻跟上,这样就保证了服务的高可用性
实现效果
当主节点Nginx挂掉以后,服务依然可以正常使用
实现思路
引入keepalived组件来实现,具体实现见下图
实现步骤
1、主节点上的Nginx的配置文件
[root@caochenlei ~]# vi /usr/local/nginx/conf/nginx.conf
upstream myserver {
server 192.168.206.128:8080;
server 192.168.206.128:8081;
}
server {
listen 80;
server_name 192.168.206.128;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://myserver;
}
[root@caochenlei ~]# /usr/local/nginx/sbin/nginx
2、启动主节点上的两台Tomcat
[root@caochenlei ~]# /usr/local/tomcat1/bin/startup.sh
[root@caochenlei ~]# /usr/local/tomcat2/bin/startup.sh
3、安装主节点上的keepalived
安装keepalived:
[root@caochenlei ~]# yum install -y keepalived
删除keepalived的配置文件:
[root@caochenlei ~]# rm -f /etc/keepalived/keepalived.conf
新增keepalived的配置文件:
[root@caochenlei ~]# vi /etc/keepalived/keepalived.conf
注意:一定要注意router_id、state、interface的值,我就在这里踩坑了。
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
#邮件服务器通知地址(暂不配置,默认即可)
smtp_server 192.168.200.1
#邮件服务器超时时间(暂不配置,默认即可)
smtp_connect_timeout 30
#当前虚拟机的IP地址,即本机ip
router_id 192.168.206.128
}
vrrp_script Monitor_Nginx {
script "/etc/keepalived/nginx_check.sh" #检测脚本执行的路径
interval 2 #检测脚本执行的间隔
weight 2 #检测脚本执行的权重
}
vrrp_instance VI_1 {
state MASTER #标识这个机器是MASTER还是BACKUP
interface eth0 #当前机器的网卡名称
virtual_router_id 51 #虚拟路由的编号,主备必须一致
priority 100 #主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1 #(VRRP Multicast广播周期秒数)
authentication {
auth_type PASS #(VRRP认证方式)
auth_pass 1111 #(密码)
}
track_script {
Monitor_Nginx #(调用Nginx进程检测脚本)
}
virtual_ipaddress {
192.168.206.50 #虚拟IP地址,与从节点组成的虚拟组网
}
}
新增keepalived的检测脚本:
[root@caochenlei ~]# vi /etc/keepalived/nginx_check.sh
#!/bin/bash
if [ "$(ps -ef | grep "nginx: master process" | grep -v grep )" == "" ]
then
killall keepalived
fi
启动keepalived服务:
[root@caochenlei ~]# service keepalived start
4、准备一台全新的虚拟机,安装Nginx和keepalived
nginx配置同上
主要是修改keepalived的配置
新增keepalived的配置文件:
[root@caochenlei ~]# vi /etc/keepalived/keepalived.conf
注意:一定要注意router_id、state、interface的值,我就在这里踩坑了。
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
#邮件服务器通知地址(暂不配置,默认即可)
smtp_server 192.168.200.1
#邮件服务器超时时间(暂不配置,默认即可)
smtp_connect_timeout 30
#当前虚拟机的IP地址,本机ip
router_id 192.168.206.129
}
vrrp_script Monitor_Nginx {
script "/etc/keepalived/nginx_check.sh" #检测脚本执行的路径
interval 2 #检测脚本执行的间隔
weight 2 #检测脚本执行的权重
}
vrrp_instance VI_1 {
state BACKUP #标识这个机器是MASTER还是BACKUP
interface eth1 #当前机器的网卡名称
virtual_router_id 51 #虚拟路由的编号,主备必须一致
priority 10 #主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1 #(VRRP Multicast广播周期秒数)
authentication {
auth_type PASS #(VRRP认证方式)
auth_pass 1111 #(密码)
}
track_script {
Monitor_Nginx #(调用Nginx进程检测脚本)
}
virtual_ipaddress {
192.168.206.50 ##虚拟IP地址,与主节点相同组成的虚拟组网
}
}
新增keepalived的检测脚本:
[root@caochenlei ~]# vi /etc/keepalived/nginx_check.sh
#!/bin/bash
if [ "$(ps -ef | grep "nginx: master process" | grep -v grep )" == "" ]
then
killall keepalived
fi
启动keepalived服务:
[root@caochenlei ~]# service keepalived start
5、检测各入口访问正常
主要是影响nginx全局的指令
配置影响Nginx服务器或与用户的网络连接。主要包括:
事件驱动模型的选择
最大连接数的配置
#参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ];
#epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。
use epoll;
#单个进程最大连接数(最大连接数=连接数*进程数)
worker_connections 65535;
虚拟主机的常见配置
server {
listen 80; #配置监听端口
server_name localhost; #配置服务名
charset utf-8; #配置字符集
access_log logs/host.access.log main; #配置本虚拟主机的访问日志
location / {
root html; #root是配置服务器的默认网站根目录位置,默认为Nginx安装主目录下的html目录
index index.html index.htm; #配置首页文件的名称
}
error_page 404 /404.html; #配置404错误页面
error_page 500 502 503 504 /50x.html; #配置50x错误页面
}
#配置https服务,安全的网络传输协议,加密传输,端口443
server {
listen 443 ssl;
server_name localhost;
ssl_certificate cert.pem;
ssl_certificate_key cert.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
配置请求的路由,以及各种页面的处理情况
location / {
root html; ##root是配置服务器的默认网站根目录位置,默认为Nginx安装主目录下的html目录
index index.html index.htm;#配置首页文件的名称
}
参考:
https://mp.weixin.qq.com/s?__biz=MzU0OTE4MzYzMw==&mid=2247516769&idx=3&sn=2c9b6a79c8bd1476d99057caedb1875d&chksm=fbb10b9fccc682899bc443838d327796d909e217a21ba36d5853a31078e6bf81ccc47fc9bf89&scene=27
https://zhuanlan.zhihu.com/p/43971218