服务器信息:CentOS Linux release 7.4.1708 (cat /etc/redhat-release查看版本)
PCRE
(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库
yum install -y pcre pcre-devel
zlib
库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip ,所以需要在 Centos 上安装 zlib 库。
yum install -y zlib zlib-devel
gcc
和openssl
也是必须的,如果已安装可忽略
yum install gcc-c++
yum install -y openssl openssl-devel
- cd /usr/local
- wget -c https://nginx.org/download/nginx-1.14.0.tar.gz
- tar -zxvf nginx-1.14.0.tar.gz
- cd nginx-1.14.0
- ./configure
- make
- make install
按照如上步骤安装完nginx后,会生成/usr/local/nginx 目录
在/etc/profile文件末尾追加如下信息使其永久性生效,并对所有系统用户生效
NGINX_HOME=/usr/local/nginx/
PATH=$PATH:$NGINX_HOME/sbin
export PATH
执行如下命令使环境变量生效
source /etc/profile
开机启动配置方法
- vi /etc/rc.local
在此文件末尾另起一行追加 /usr/local/nginx/sbin/nginx
chmod 755 rc.local #设置文件可执行权限
nginx -s reload
#修改配置后重新加载生效
nginx -s reopen
#重新打开日志文件
nginx -t -c /path/to/nginx.conf
#测试nginx配置文件是否正确
关闭nginx相关
nginx -s stop
#快速停止nginx
nginx quit
#完整有序的停止nginx
启动nginx
nginx -c /usr/local/nginx/conf/nginx.conf
实现目标:通过访问指定域名来访问SpringCloud微服务的网关服务来实现对整个项目入口的分发。预备信息如下
二级域名:
qbmall.hdlxdl.site
转发端口:8504
域名解析:阿里云
网关技术:zuul
通过阿里云服务域名-域名解析功能添加域名解析如下图所示,记录值填写自己服务的ip地址。目标是通过配置的主机记录来访问我们的微服务的8504端口指定的网关服务
添加如下配置,大图的意思就是所有访问qbmall.hdlxdl.site地址的请求全部转发到127.0.0.1:8504
端口服务上,而8504端口对应的服务就是我们下面要部署的网关的服务
http{
upstream qbmall_pool{
server 127.0.0.1:8504;
}
server{
server {
listen 80;
server_name qbmall.hdlxdl.site;
access_log logs/qbmall.log;
error_log logs/qbmall.error;
#将所有请求转发给demo_pool池的应用处理
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://qbmall_pool;
}
` }
}
}
我们这里部署的服务有如下几个 ,希望达到的效果是通过访问网关服务分发到测试业务服务
配置中心服务:
config-1.0-SNAPSHOT.jar
端口:8501
注册中心服务:eureka-0.0.1-SNAPSHOT.jar
端口:8502
网关服务:getway-1.0-SNAPSHOT.jar
端口:8504
测试业务服务:admin-1.0-SNAPSHOT.jar
端口:8503
依次启动服务java -jar 启动服务,但是这样有个问题就是随着终端的关闭 服务也跟着关闭。
java -jar config-1.0-SNAPSHOT.jar
…
使用nohup让服务在后台运行
nohup java -jar config-1.0-SNAPSHOT.jar > log.file 2>&1 &
0 标准输入(一般是键盘)
1 标准输出(一般是显示屏,是用户终端控制台)
2 标准错误(错误信息输出)
查看端口运行情况
关闭进程
kill -9 8756 #关闭进程同时也就关闭了服务
常用微服务脚本
把如下shell脚本文件,保存为相应的名称这里作者保存为qbmall.sh,并放置在/user/local/sh目录下
然后我们就可以使用/user/local/sh/qbmall.sh start
对应的微服务jar路径即可来启动微服务。
当然这里支持start stop restart status 来启动,关闭,重启,查看状态
#!/bin/bash
SpringBoot=$2
if [ "$1" = "" ];
then
echo -e "\033[0;31m 未输入操作名 \033[0m \033[0;34m {start|stop|restart|status} \033[0m"
exit 1
fi
if [ "$SpringBoot" = "" ];
then
echo -e "\033[0;31m 未输入应用名 \033[0m"
exit 1
fi
function start()
{
count=`ps -ef |grep java|grep $SpringBoot|grep -v grep|wc -l`
if [ $count != 0 ];then
echo "$SpringBoot is running..."
else
echo "Start $SpringBoot success..."
nohup java -Xms256m -Xmx512m -jar $SpringBoot > /dev/null 2>&1 &
fi
}
function stop()
{
echo "Stop $SpringBoot"
boot_id=`ps -ef |grep java|grep $SpringBoot|grep -v grep|awk '{print $2}'`
count=`ps -ef |grep java|grep $SpringBoot|grep -v grep|wc -l`
if [ $count != 0 ];then
kill $boot_id
count=`ps -ef |grep java|grep $SpringBoot|grep -v grep|wc -l`
boot_id=`ps -ef |grep java|grep $SpringBoot|grep -v grep|awk '{print $2}'`
kill -9 $boot_id
fi
}
function restart()
{
stop
sleep 2
start
}
function status()
{
count=`ps -ef |grep java|grep $SpringBoot|grep -v grep|wc -l`
if [ $count != 0 ];then
echo "$SpringBoot is running..."
else
echo "$SpringBoot is not running..."
fi
}
case $1 in
start)
start;;
stop)
stop;;
restart)
restart;;
status)
status;;
*)
echo -e "error $0 {start|stop|restart|status} {SpringBootJarName}"
esac
因为我们的网关服务配置了所有admin的请求,都会路由到admin服务上如下所示
所以,如果访问网关服务并且追加admin服务的接口请求,能正常访问就算部署成功。
那么通过以上启动服务后,如果在浏览器访问hdmall.hdlxdl.site/admin/api/getList
能正常返回值
则算成功
访问eureka管理页面查看服务注册信息
可以通过访问hdmall.hdlxdl.site:8502
来访问eureka后台管理页面(8502端口对应的服务是注册中心服务) 如下图可以看到已注册到注册中心的服务提供者
- 注意不要在单体服务和网关处同时配置了跨域的处理
- 访问单体服务必须要和网关配置一致,比如 hdmall.hdlxdl.site/admin访问admin服务等