一、前置工作
1、安装编译工具和库文件
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
2、安装PCRE
PCRE 作用是让 Nginx 支持 Rewrite 功能
## 下载pcre wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz ## 解压 tar -zxvf pcre-8.35.tar.gz ## 编译安装 cd pcre-8.35/ ./configure make && make install ## 查看pcre版本 pcre-config --version 8.35
二、正式安装nginx
1、下载最新稳定版Nginx-1.20.2
wget https://nginx.org/download/nginx-1.20.2.tar.gz
2、解压编译安装:
## 解压: tar -zxvf nginx-1.20.2.tar.gz ## 编译安装 cd nginx-1.20.2/ ./configure make && make install
3、安装完的Nginx,会自动创建到 /usr/local 目录下:
[root@master nginx-1.20.2]# cd /usr/local/ [root@master local]# ls bin etc games include lib lib64 libexec nginx sbin share src ## Nginx的启动命令位于 cd /usr/local/nginx/sbin [root@master sbin]# ls nginx
4、将Nginx命令添加到环境变量
vi /etc/profile ## 在fi和if中间行添加 export PATH=$PATH:/usr/local/nginx/sbin ## 让新的环境变量配置生效 source /etc/profile
5、启动Nginx及常用命令
## 启动Nginx nginx ## 产看Nginx版本 nginx -v ## 立即停止,不推荐使用 nginx -s stop ## 平滑停止,推荐使用 nginx -s quit ## 重新加载(平滑重启) nginx -s reload
6、Nginx默认监听服务器的80端口,校验
三、Nginx的配置文件
1、Nginx的配置文件的位置:
[root@master conf]# cd /usr/local/nginx/conf/ [root@master conf]# ls fastcgi.conf fastcgi_params koi-utf mime.types nginx.conf scgi_params uwsgi_params win-utf fastcgi.conf.default fastcgi_params.default koi-win mime.types.default nginx.conf.default scgi_params.default uwsgi_params.default
2、主配置文件:nginx.conf:
由三部分组成:
-
全局块:主要设置影响nginx服务器整体运行的配置指令,如:nginx的用户(组),允许生成的工作进程数(并发进程数数,提升nginx的并发性能),进程pid存放路径,日志存放路径,配置文件的引入等等;
-
events块:影响Nginx服务器与用户的网络连接,比如:worker_connections 为允许的用户最大连接数;
-
http块:Nginx服务器中配置最频繁的部分,代理,负载,缓存,以及外部配置的引入等都在这里配置;
-
注意:http块中包含http全局块,server块;
3、http块详解:
-
http全局块:包含文件引入,MIME-TYPE定义,日志自定义,连接超时时间,单连接请求数上限等;
-
server块:这块和虚拟主机有密切关系,虚拟主机从用户角度看,是和硬件主机一模一样的,是为了减少硬件成本;
-
我们平时所作的诸多配置几乎都在在server块中完成;
4、server块详解:
-
server全局块:本虚拟主机的监听配置和本虚拟主机的名称或IP配置;
-
location块:一个server块可以配置多个location块;
-
基于Nginx服务器接收的请求字符串(如server_name/uri-string),对虚拟主机名称之外的字符串进行匹配(/url-string),对特定的请求进行处理。
-
地址定向,数据缓存,应答控制等功能,还有许多第三方模块的配置也在这里进行。
四、Nginx实战
1、反向代理 + 负载均衡:
背景:在实际项目中,客户提供的服务器不允许使用80和443端口,但是我使用的k8s中的ingress只认80和443端口;
所以,我就在node1,node2节点开启了两个ingress,之后再master节点使用反向代理+负载均衡的方式,监听1080端口,然后将流量转发到内部的node1和node2的80端口上去;
upstream iotplat { server 10.130.41.15; server 10.130.59.49; } server { listen 1080; server_name localhost; # server_name iotplat.cosmoplat.com; location / { proxy_pass http://iotplat; proxy_set_header Host iotplat.cosmoplat.com; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }
有了这个配置之后,我们使用 http://masterip:1080 即可正常访问网站;
# 其中 proxy_set_header Host tb.openiot.com; ##是告诉下游服务器,访问它的host域名为tb.openiot.com,这是ingress中配置的匹配域名; ### 正常时候,如果我们是要把上有的host传递到下游去,可使用$host获取动态变量值,传递下去; # 后面的三行,是为了实现高级协议转发,如websocket的转发;不然websocket长连接无法被代理下去。
五、增加conf.d目录,便于多项目管理
在默认安装的nginx的conf目录下,只有一个nginx.conf文件,当项目多了之后,非常不便于管理,我们常用的做法是新建一个conf.d目录,然后让nginx加载配置时候一并把这个目录下的配置文件都加载上!
1、在nginx目录下,创建conf.d文件夹:
[root@master conf]# mkdir /usr/local/nginx/conf.d [root@master conf]# chmod 777 /usr/local/nginx/conf.d
2、在nginx主配置文件倒数第二行http代码块内增加一行配置:
include /usr/local/nginx/conf.d/*.conf;
3、在conf.d目录下增加一个具体项目的配置文件:
[root@master ~]# cd /usr/local/nginx/conf.d/ [root@master conf.d]# vim iotplat.conf upstream iotplat { server 10.130.41.15; server 10.130.59.49; } server { listen 80; # server_name localhost; server_name iotplat.cosmoplat.com; location / { proxy_pass http://iotplat; proxy_set_header Host iotplat.cosmoplat.com; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }
4、最后重新加载nginx配置即可生效:
nginx -s reload
六、为已经安装的nginx增加SSL模块:
1、首先查看,是否安装了SSL模块:
[root@master local]# nginx -V nginx version: nginx/1.20.2 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
2、进入nginx原安装模块,重新带后缀执行./configure命令:
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
3、再执行make命令,注意,此时不要执行make install命令,否则就是覆盖安装:
make
4、停止运行原nginx:
nginx -s stop # nginx -s quit
5、使用当前目录下的objs目录下的nginx命令覆盖原nginx命令:
cp ./objs/nginx /usr/local/nginx/sbin/
6、重启nginx,并查看-V:
# 重启nginx [root@master nginx-1.20.2]# nginx [root@master nginx-1.20.2]# nginx -V nginx version: nginx/1.20.2 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) built with OpenSSL 1.0.2k-fips 26 Jan 2017 TLS SNI support enabled configure arguments: --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
可见此时SSL模块已经安装完成。其它模块同理!