11.问题:如何在Linux服务器上搭建nginx服务器并进行反向代理?

解决方案:

第1步:远程登录Linux服务器,在线下载nginx到根目录

wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" \
http://nginx.org/download/nginx-1.14.2.tar.gz

第2步:创建nginx用户

useradd nginx

第3步:创建 nginx 的安装目标目录

mkdir /usr/local/nginx

第4步:安装编译时候需要的依赖包

yum -y install pcre-devel openssl openssl-devel

第5步:将Nginx压缩包解压

tar -zxf nginx-1.14.2.tar.gz

第6步:将nginx-1.14.2包拷贝到Nginx文件夹中

cp -r nginx-1.14.2 /usr/local/nginx/nginx-1.14.2

第7步:进入nginx-1.14.2包中

cd nginx-1.14.2

第8步:编译并安装Nginx

./configure --prefix=/usr/local/nginx --user=ngin --with-http_ssl_module
make
make install

第10步:配置nginx的环境变量

cd /etc
cp profile profile.2019.03.10
vim profile
修改内容为export PATH=/usr/local/java/jdk1.8.0_201/bin:$PATH:/usr/local/nginx/sbin
source profile

第11步:重新创建Nginx用户

useradd -s /sbin/nologin -M nginx
id nginx

第12步:修改Nginx的conf配置文件(注:web静态资源统一放在/usr/local/nginx/html文件夹下)

cd /usr/local/nginx/conf
cp nginx.conf nginx.conf.2019.03.10
vim nginx.conf
修改内容为将"#user nobody"的注释#去掉即可

第9步:运行Nginx

nginx -c /usr/local/nginx/conf/nginx.conf

第10步:检查Nginx是否正在运行...

netstat -tlunp | grep nginx
ps -A|grep nginx

第11步:测试,出现以下画面说明Nginx安装并运行成功!

用浏览器访问http://47.101.171.255

第12步:更新Nginx配置文件

cd /usr/local/nginx/conf
cp nginx.conf nginx.conf.2019.3.11
vim nginx.conf   // 开放 http 访问日志, 开放gzip压缩

测试配置文件
nginx -t -c /usr/local/nginx/conf/nginx.conf

输出结果为:
[root@hbs20190308 conf]# nginx -t -c /usr/local/nginx/conf/nginx.conf
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@hbs20190308 conf]# nginx -s reload

热加载配置文件: 不停止nginx服务的情况下加载配置文件
nginx -s reload

第13步:用浏览器进行测试,并查看日志文件

 cd /usr/local/nginx
 cd logs
 more access.log 

第14步:将本地静态网页资源上传到Nginx服务器(目标位置:root@47.101.171.255:/usr/local/nginx/html/)

进入E盘(PuTTY所在的磁盘)
e:
进入PuTTY文件夹
cd E:\PuTTY
将case01.html上传到Linux服务器的根目录下
pscp F:\html\case01.html root@47.101.171.255:/usr/local/nginx/html/
输入密码登录即可开始上传...
root@47.101.171.255's password:
case01.html               | 17 kB |  17.6 kB/s | ETA: 00:00:00 | 100%
恭喜你!上传成功!
E:\PuTTY>

第15步:打开浏览器进行访问测试

http://47.101.171.255/case01.html

第16步:前往阿里云网站购买并注册域名

https://wanwang.aliyun.com/domain/?spm=5176.100251.111252.32.4dbe4f153Hs4wv

第17步:前往阿里云控制台进行域名解析配置

第18步:前往Linux服务器中的Nginx服务器配置域名解析

cd /etc
cp hosts hosts.2019.03.10
vim hosts
按I键进入编辑模式,hosts文件中添加域名解析记录
47.101.171.255 doc.huangbingsen.com
按ESC键退出编辑,输入":wq"保存退出vim编辑模式

第19步:因为域名需要备案才能被外网所访问,所以在本地做实验还需要通过Windows的cmd命令解析域名

用记事本编辑: C:\Windows\System32\drivers\etc\hosts
notepad hosts
添加47.101.171.255 doc.huangbingsen.com保存退出
ping doc.huangbingsen.com 通了说明本地域名解析成功!

C:\WINDOWS\system32>notepad hosts

C:\WINDOWS\system32>ping doc.huangbingsen.com

正在 Ping doc.huangbingsen.com [47.101.171.255] 具有 32 字节的数据:
来自 47.101.171.255 的回复: 字节=32 时间=22ms TTL=52
来自 47.101.171.255 的回复: 字节=32 时间=22ms TTL=52
来自 47.101.171.255 的回复: 字节=32 时间=22ms TTL=52
来自 47.101.171.255 的回复: 字节=32 时间=22ms TTL=52

47.101.171.255 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 22ms,最长 = 22ms,平均 = 22ms

C:\WINDOWS\system32>

第20步:前往阿里云购买并下载SSL证书

https://common-buy.aliyun.com/?spm=5176.2020520154.cas.3.7861FyCVFyCVUU&commodityCode=cas#/buy

第21步:前往Linux服务器的nginx安装目录下,创建cert目录

返回根目录
cd 
进入nginx安装目录
cd /usr/local/nginx
创建cert目录
mkdir cert

第22步:将下载到本地的SSL证书(即1909365doc.huangbingsen.comnginx.zip)压缩包通过sftp上传到Linux服务器(目标位置为root@47.101.171.255:/usr/local/nginx/cert/)

进入E盘(PuTTY所在的磁盘)
e:
进入PuTTY文件夹
cd E:\PuTTY
将1909365_doc.huangbingsen.com_nginx.zip上传到Linux服务器的根目录下
pscp F:\1909365_doc.huangbingsen.com_nginx.zip root@47.101.171.255:/usr/local/nginx/cert/
输入密码登录即可开始上传...
root@47.101.171.255's password:
1909365_doc.huangbingsen. | 3 kB |   4.0 kB/s | ETA: 00:00:00 | 100%
恭喜你,上传成功!
E:\PuTTY>

第23步:前往/usr/local/nginx/cert目录下,将SSL证书解压

cd cert
unzip 1909365_doc.huangbingsen.com_nginx.zip
ls
输出结果为1909365_doc.huangbingsen.com.key  1909365_doc.huangbingsen.com_nginx.zip  1909365_doc.huangbingsen.com.pem

第25步:在/usr/local/nginx/conf目录中新建一个配置文件ums.conf,配置https协议

cd
cd /usr/local/nginx/conf
touch ums.conf
vim ums.conf
添加以下配置信息

server{
    listen 80;
    server_name doc.huangbingsen.com;
    return 301 https://doc.huangbingsen.com;
}

server{
    listen 443; 
    server_name doc.huangbingsen.com;

    ssl on;

    ssl_certificate   cert/1909365_doc.huangbingsen.com.pem;
    ssl_certificate_key  cert/1909365_doc.huangbingsen.com.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    location / {
        root ums;
        index addUser.html;
    }
}  
保存退出!

第24步:修改配置,将SSL安装到Nginx中

cd
cd /usr/local/nginx/conf
cp nginx.conf nginx.conf.2019.03.10.1444
vim nginx.conf
找到HTTPS server的配置节点,在该节点上面引入外部的配置文件(即刚才创建的ums.conf文件)
include ums.conf;
保存退出!

第25步:测试配置文件

nginx -t -c /usr/local/nginx/conf/nginx.conf

此处可能报错!!!

错误原因:这可能是证书路径存放的位置不正确导致的,而且只要写绝对路径,就会报错,无论windows还是linux。所以将证书文件放到nginx.conf所在的目录下即可。

cd
cd /usr/local/nginx/cert
将证书文件放到nginx.conf所在的目录/usr/local/nginx/conf/
cp 1909365_doc.huangbingsen.com.key /usr/local/nginx/conf/1909365_doc.huangbingsen.com.key
cp 1909365_doc.huangbingsen.com.pem /usr/local/nginx/conf/1909365_doc.huangbingsen.com.pem
修改ums配置文件
cd /usr/local/nginx/conf
vim ums.conf
修改内容为:

第26步:重新测试配置文件

nginx -t -c /usr/local/nginx/conf/nginx.conf
结果输出如下所示,说明配置成功!
[root@hbs20190308 conf]# nginx -t -c /usr/local/nginx/conf/nginx.conf
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

第26步:热加载配置文件: 不停止nginx服务的情况下加载配置文件

nginx -s reload

第27步:测试

打开浏览器访问https://doc.huangbingsen.com或者https://47.101.171.255

附:另外nginx默认首页的https配置

cd
cd /usr/local/nginx/conf
vim nginx.conf
找到HTTPS server的配置节点,将该节点#打开,将外部ums.conf配置注释掉

# include ums.conf;
# HTTPS server

server {
    listen       443 ssl;
    server_name  localhost;

    ssl on;

    ssl_certificate      1909365_doc.huangbingsen.com.pem;
    ssl_certificate_key  1909365_doc.huangbingsen.com.key;

    #ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers  on;

    location / {
        root   html;
        index  index.html index.htm;
    }
}
保存退出!
nginx -t -c /usr/local/nginx/conf/nginx.conf
nginx -s reload
测试:https://47.101.171.255/

第28步:Nginx的反向代理配置

28.1.创建代理对象(Tomcat服务器)的配置文件

cd
cd /usr/local/nginx/conf
touch tomcatserver.conf
vim tomcatserver.conf

28.2.添加代理配置信息

upstream tomcat{
    server 172.19.30.81:8080;
}

server{
    listen 80;
    server_name 47.101.171.255;

    access_log logs/tomcatserver.access.log;
    error_log logs/tomcatserver.error.log;

    index index.jsp index.html;

    location / {
        proxy_pass http://tomcat;
        proxy_redirect     off;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_max_temp_file_size 0;
        proxy_connect_timeout      90;
        proxy_send_timeout         90;
        proxy_read_timeout         90;
        proxy_buffer_size          4k;
        proxy_buffers              4 32k;
        proxy_busy_buffers_size    64k;
        proxy_temp_file_write_size 64k;
   }
}
保存退出!

28.3.将代理对象配置文件tomcatserver.conf引入到nginx.conf配置文件中

vim nginx.conf

保存退出

28.4.测试配置文件并重新启动nginx

nginx -t -c /usr/local/nginx/conf/nginx.conf
nginx -s reload

28.5.测试

浏览器访问http://47.101.171.255
出现以下画面说明反向代理配置成功!

祝你好运!


2019/3/10 17:25:32 已解决!