Java开发环境系列:反向代理之负载均衡Nginx安装与配置

Java开发环境系列:反向代理之负载均衡Nginx安装与配置

先介绍一个牛逼的可以一键生成Nginx配置的开源项目

仓库地址:https://github.com/digitalocean/nginxconfig.io

网站地址:https://nginxconfig.io

nginxconfig 目前支持:

Angular、React、Vue、Node.js

PHP、Python

wordpress、Magento、Drupal

缓存、Https、日志等各种配置...

Java开发环境系列:反向代理之负载均衡Nginx安装与配置



什么是反向代理?

一个完整的代理请求过程为:

Java开发环境系列:反向代理之负载均衡Nginx安装与配置

客户端首先与代理服务器创建连接,接着根据代理服务器所使用的代理协议,请求对目标服务器创建连接、或者获得目标服务器的指定资源。 Web代理(proxy)服务器是网络的中间实体。 代理位于Web客户端和Web服务器之间,扮演“中间人”的角色。HTTP的代理服务器即是Web服务器又是Web客户端。

代理服务器是介于客户端和Web服务器之间的另一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。

正向代理 :

是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

反向代理:

在服务器端接受客户端的请求,然后把请求分发给具体的服务器进行处理,然后再将服务器的响应结果反馈给客户端。Nginx就是其中的一种反向代理服务器软件。

Nginx:

Nginx ("engine x") ,Nginx (“engine x”) 是俄罗斯人Igor Sysoev(塞索耶夫)编写的一款高性能的 HTTP 和反向代理服务器。也是一个IMAP/POP3/SMTP代理服务器;也就是说,Nginx本身就可以托管网站,进行HTTP服务处理,也可以作为反向代理服务器使用。

说明:客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址,还有代理程序的端口。反向代理正好与正向代理相反,对于客户端而言代理服务器就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端。
Java开发环境系列:反向代理之负载均衡Nginx安装与配置

windows下安装nginx

1、下载软件

官方地址:http://nginx.org/en/download.html

Mainline version 主线版本 Stable version 稳定版本 Legacy versions 历史版本。一般生产用稳定版本,本文使用主线版本。

下载后解压到磁盘路径C:\DevTools\nginx-1.13.7

Java开发环境系列:反向代理之负载均衡Nginx安装与配置

2、启动nginx

注意不要直接双击nginx.exe,这样会导致修改配置后重启、停止nginx无效,需要手动关闭任务管理器内的所有nginx进程。

正确方式:在安装目录(C:\DevTools\nginx-1.13.7)下,打开命令行工具(shift,在此处打开命令窗口),用命令 启动/关闭/重启nginx

start nginx : 启动nginx

nginx -s reload: 因改变了Nginx相关配置,需要重新加载配置而重载

nginx -s reopen: 重新打开日志文件

nginx -t -c /path/to/nginx.conf 测试nginx配置文件是否正确

关闭nginx:

nginx -s stop: 快速关闭Nginx,可能不保存相关信息,并迅速终止web服务

nginx -s quit: 平稳关闭Nginx,保存相关信息,有安排的结束web服务

其他命令:

nginx -t: 不运行,测试配置文件。nginx 将检查配置文件语法的正确性,并尝试打开配置文件中引用到的文件。

nginx -v: 显示 nginx 的版本。

nginx -V: 显示 nginx 的版本,编译器版本和配置参数。

3、测试

浏览器访问:localhost

Java开发环境系列:反向代理之负载均衡Nginx安装与配置Java开发环境系列:反向代理之负载均衡Nginx安装与配置

linux下安装nginx

必要软件环境

#yum install wget

因为Nginx以来与gcc的编译环境,所以,在mini centos中需要安装编译环境来使Nginx能够编译起来。

#yum install gcc-c++

依赖的解压包

#yum -y install zlib zlib-devel

openssl安装

#yum install -y openssl openssl-devel

以上软件非必须,但为了保证安装成功,请尽量安装。

安装PCRE

Nginx的http模块需要使用pcre来解析正则表达式,也可以让 Nginx 支持 Rewrite 功能。

方式一:

#yum -y install pcre pcre-devel

方式二:

1、下载 PCRE 安装包,下载地址: http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz

[[email protected] src]# wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz

2、解压安装包:

[[email protected] src]# tar zxvf pcre-8.35.tar.gz

3、进入安装包目录

[[email protected] src]# cd pcre-8.35

4、编译安装

[[email protected] pcre-8.35]# ./configure

[[email protected] pcre-8.35]# make && make install

5、查看pcre版本

[[email protected] pcre-8.35]# pcre-config --version

安装Nginx

先去Nginx官网查看最新版的Nginx源码地址:https://nginx.org/en/download.html

#wget -c https://nginx.org/download/nginx-1.10.3.tar.gz

下面开始对其解压

#tar -zxvf nginx-1.10.3.tar.gz

进入Nginx目录

#cd nginx-1.10.3

Nginx源码编译:

#./configure

#make

#make install

测试

一般编译安装完的软件都会放在/usr里,这不是user,这是Unix System Resource,是Unix系统资源的缩写。我们在/user/local/里面发现了nginx,进入

#cd /usr/local/nginx/

如果找不到,试试这条命令:

#whereis nginx

它会告诉你nginx在哪,nginx的命令在/usr/local/nginx/sbin目录下,对于nginx的启动,停止,我简单的列举下

./nginx 启动nginx

./nginx -s stop 停止nginx,此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程。

./nginx -s quit 停止nginx,此方式停止步骤是待nginx进程处理任务完毕进行停止。

./nginx -s reload 重启nginx,一般是重新载入配置文件时使用

./nginx -s reopen 重启nginx,重新打开日志文件

./nginx -v 查看nginx版本

./nginx -t 查看配置文件正确性

查询nginx进程:

ps aux|grep nginx

root 23045 0.0 0.0 24468 764 ? Ss 23:02 0:00 nginx: master process sbin/nginx

nobody 23046 0.0 0.1 24888 1232 ? S 23:02 0:00 nginx: worker process

看到这两条进程状态,你成功了。PS:grep是筛选,|是管道,Linux里筛选的常用方式。

现在,在你的浏览器中输入你远端服务器的ip,看看是否有Nginx欢迎你的字样。

如果没有,关闭CentOS的防火墙试试。

PS:防火墙关闭之后注意配置iptables。CentOS7.0以上默认firewall为防火墙配置,我们这里改为iptables配置。

关闭防火墙

停止firewall

#systemctl stop firewalld.service

禁止firewall开机启动

#systemctl disable firewalld.service

查看默认防火墙状态(关闭后显示not running,开启后显示running)

#firewall-cmd --state

配置iptables,首先需要安装iptables服务

#yum install iptables-services

编辑防火墙配置文件

#vim /etc/sysconfig/iptables

加入下面的几行,22是默认存在的

-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -jACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 8080-j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT

vim里面是直接yy然后p的,不懂的朋友去看下vim编辑器的基本操作,里面有具体的详情。vim里面撤销编辑是回到初始页面,就是按esc,然后点击u即可。

22端口是供ssh访问的,80,8080端口是http服务访问的,以后用到https,也需要打开443端口的访问权限。

保存,重启iptables服务

最后重启防火墙使配置生效

#systemctl restart iptables.service

设置防火墙开机启动

#systemctl enable iptables.service

再次访问远程服务器的ip,是不是有Nginx欢迎你的页面了?

禁止防火墙开机自启动

重启之后firewall又被打开,所以我们要设置禁止firewall开机自启动

禁止firewall开机自启动

停止firewall

#systemctl stop firewalld.service

禁止firewall开机启动

#systemctl disable firewalld.service

添加nginx开机自启动

nginx服务未被加入到开机自启动列表,重启服务器后,未发现nginx服务,我们需要手动加入开机自启动

第一步,添加一个新文件,nginx.service

#vim /lib/systemd/system/nginx.service

输入以下内容

========

[Unit]

Description=nginx

After=network.target

[Service]

Type=forking

ExecStart=/usr/local/nginx/sbin/nginx

ExecReload=/usr/local/nginx/sbin/nginx -s reload

ExecStop=/usr/local/nginx/sbin/nginx -s quit

PrivateTmp=true

[Install]

WantedBy=multi-user.target

=============================================

更改文件权限

#chmod 745 /lib/systemd/system/nginx.service

设置开机自启动

#systemctl enable nginx.service