源码安装nginx,平滑升级nginx,nginx认证和访问控制

发布时间 2023-03-23 16:23:14作者: zyl88

Nginx 是俄罗斯人编写的十分轻量级的HTTP服务器 是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器 【官方网站:http://nginx.org】

源码安装Nginx
#yum -y install gcc pcre-devel openssl-devel
#tar -xzf nginx-1.7.10.tar.gz
#cd nginx-1.7.10
#./configure \ //后面不加参数时,软件自动安装默认路径、软件模块
> --user=nginx \ //指定用户
> --group=nginx \ //指定组
>--prefix=/usr/local/nginx \ //默认安装路径
>--with-http_ssl_module //(with-模块名称)安装软件的模块,开启ssl加密功能
#make && make install

#/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf //启动Nginx服务
#PATH=$PATH:/usr/local/nginx/sbin //将nginx变成全局变量
#nginx //启动
#nginx -s stop //关闭
#nginx -s reload //重新读取配置文件 而不需要关机(服务必须开启了)
#nginx -V //查看服务器的状态(编译参数)
#nginx -v //查看nginx版本
#nginx -t //测试默认配置文件
#nginx -c //指定配置文件

#ps aux |grep nginx //查看服务相关进程
#netstat -anptu | grep nginx //nginx服务默认通过TCP 80端口监听客户端请求

#ls /usr/local/nginx //安装目录
sbin/ 主程序
html/ 页面文件
logs/ 日志和pid文件
conf/ 配置文件

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

软件覆盖
Nginx-1.8 [旧版]
Nginx-1.9 [新版]
#./configure
#make
#make install
下列的都会被覆盖:
/usr/local/nginx/html/ //页面
/usr/local/nginx/conf/ //配置
/usr/local/nginx/logs/ //日志
/usr/local/nginx/sbin/ //程序

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

Nginx平滑升级

在不停止服务的情况下升级软件版本
#rm -rf /root/lnmp_soft/nginx-1.8.0
#tar -xzf nginx-1.8.0.tar.gz
#cd nginx-1.8.0
#ls //没有objs目录
#./configure \
>--prefix=/usr/local/nginx \ //可写可不写,软件默认安装路径
>--with-http_ssl_module //加密模块
#ls objs //没有绿色的程序
#make //把源码转成二进制程序
#ls objs //有绿色的程序

不确定新版本的稳定性及可用性,所以将旧版本备份
#mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
#cp objs/nginx /usr/local/nginx/sbin/ //拷贝新版本
#make upgrade //升级
或者 重启服务
#nginx -s stop //关掉nginx服务
#nginx //开启nginx服务
#nginx -v //查看版本

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

Nginx的配置文件:
#vim /usr/local/nginx/conf/nginx.conf //主配置文件
全局设置[进程,并发量,日志]
user nginx; //进程所有者
worker_processes 1; //启动进程数量
error_log /var/log/nginx/error.log; //日志文件
pid /var/run/nginx.pid; //PID文件
events {
worker_connnections 1024; //单个进程最大并发量
}
http{
server {
listen 80; //监听端口
server_name localhost;
location {
root html; //存放页面的路径
index index.html index.htm; //默认页面文件
}
}
}
worker_processes //与CPU核心数量一致 4
worker_connections //每个worker最大并发连接数 65535
server_tokens //服务器版本号信息 off
client_header_buffer_size //默认请求包头信息的缓存 1k
large_client_header_buffers //大请求包头部信息的缓存个数与容量 4 1k
error_page 404 //自定义404错误页面 /40x.html;
expires 30d; //定义客户端缓存时间为30天

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

Nginx的认证和访问控制

通过Nginx实现Web页面的认证,需要修改Nginx配置文件,在配置文件中添加auth语句实现用户认证。最后使用htpasswd命令创建用户及密码即可。
#vim /usr/local/nginx/conf/nginx.conf
... ...
http{
server {
listen 80;
server_name www.a.com;
location / {
auth_basic "任意字串"; //认证提示符
auth_basic_user_file "/usr/local/nginx/pass"; //认证密码文件
allow 192.168.2.100;
allow 192.168.4.100;
deny all;
root html;
index index.html;
}
}
}
#yum -y install httpd-tools //安装加密软件包
#htpasswd -cm /usr/local/nginx/pass tom //-c:创建新文件 -m:加密密码 tom:用户名
#htpasswd -m /usr/local/nginx/pass lily //添加新用户无需-c,-c会将旧文件覆盖。
#nginx -s reload //重新加载配置文件
#curl http://192.168.4.5 //输入密码后可以访问

===========================================
基于域名、IP、端口

配置基于域名的虚拟主机,实现以下目标:
实现两个基于域名的虚拟主机,域名分别为www.aa.com和www.bb.com
对域名为www.aa.com的站点进行用户认证,用户名称为tom,密码为123456

#vim /usr/local/nginx/conf/nginx.conf
... ...
http{
server {
listen 80; //端口
server_name www.a.com; //域名
auth_basic "Input Password:"; //认证提示符
auth_basic_user_file "/usr/local/nginx/pass"; //认证密码文件
location / {
root html; //指定网站根路径
index index.html;
}
}

server {
listen 80;
server_name www.b.com;
location / {
root web;
index index.html;
}
}
}
# htpasswd –cm /usr/local/nginx/pass tom //创建账户密码文件
#mkdir /usr/local/nginx/web
#echo "web" >/usr/local/nginx/web/index.html
#ngins -s reload

客户端测试:
修改客户端主机192.168.4.100的/etc/hosts文件,进行域名解析
# vim /etc/hosts
192.168.4.5 www.aa.com www.bb.com

登录192.168.4.100客户端主机进行测试
注意:SSH –X远程连接调用虚拟机的firefox时,请先关闭真实机的firefox。
[root@client ~]# firefox http://www.aa.com //输入密码后可以访问
[root@client ~]# firefox http://www.bb.com //直接访问

注意!!!:若客户端直接用IP访问,则打开的页面是配置文件的第一个server里的页面文件。

-----------------------------------------------------------------------------------------------
基于IP的配置:
#vim /usr/local/nginx/conf/nginx.conf
... ...
http{
server {
listen 192.168.4.5:80; //指定IP的端口
server_name www.a.com; //域名
auth_basic "Input Password:"; //认证提示符
auth_basic_user_file "/usr/local/nginx/pass"; //认证密码文件
location / {
root html; //指定网站根路径
index index.html;
}
}

server {
listen 192.168.2.5:80; //指定IP的端口
server_name www.a.com;
location / {
root web;
index index.html;
}
}
}
# htpasswd –cm /usr/local/nginx/pass tom //创建账户密码文件
#mkdir /usr/local/nginx/web
#echo "web" >/usr/local/nginx/web/index.html
#nginx -s reload
重启服务后,访问哪个IP就会出现相应的页面文件。
如:curl http://192.168.4.5 会出现html/index.html

------------------------------------------------------------------------------------------------------
基于端口的配置:
#vim /usr/local/nginx/conf/nginx.conf
... ...
http{
server {
listen 80; //端口
server_name www.a.com; //域名
auth_basic "Input Password:"; //认证提示符
auth_basic_user_file "/usr/local/nginx/pass"; //认证密码文件
location / {
root html; //指定网站根路径
index index.html;
}
}

server {
listen 8080; //不同的端口
server_name www.a.com;
location / {
root web;
index index.html;
}
}
}
# htpasswd –cm /usr/local/nginx/pass tom //创建账户密码文件
#mkdir /usr/local/nginx/web
#echo "web" >/usr/local/nginx/web/index.html
#nginx -s reload
重启服务后,访问哪个端口就会出现哪个页面文件。
如:curl http://192.168.4.5:8080

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

加密网站

http协议是明文协议。(不管用什么软件,在网络上传输的包都是没加密的,可直接查看)
https(http+ssl)协议是密文协议。

加密网站HTTPS
加密算法:
对称算法(加密和解密都是相同的密码):AES,DES
非对称算法(加密和解密是不同的密码):DSA,RSA
两种算法都很安全,目前都还没被破解。

SSL加密网站的核心技术是非对称生成密钥

#cd /usr/local/nginx/conf //必须将密钥放到这个目录,否则无法读取
#openssl genrsa -out my.key //生成私钥文件my.key
或#openssl genrsa > 自定义私钥名称 //用rsa算法生成私钥文件
私钥的默认密码是1000位,若要更改密码位数,则4000>是生成4000位的密码。

#openssl req -new -x509 -key my.key -out my.crt //生成证书文件my.crt
或者#openssl req -new -x509 -key my.key -out my.crt
国家,省份,城市,公司,部门,服务器,邮箱

修改配置文件,设置加密网站的虚拟主机
#vim /usr/local/nginx/conf/nginx.conf
... ...
server {
listen 443 ssl; //监听443加密端口,开启SSL
server_name www.jiami.com;
ssl_certificate my.crt; //指定证书文件
ssl_certificate_key my.key; //指定私钥文件
... ...
location / {
root sec; //更改了访问页面
index index.html index.htm;
}
}
#mkdir /usr/local/nginx/sec
#echo "security page" > /usr/local/nginx/sec/index.html
#nginx -s reload

客户端测试:
#vim /etc/hosts
192.168.4.5 www.jiami.com
#firefox https://www.jiami.com //信任证书后可以访问

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

模拟环境的配置:
client:192.168.4.100
---------------------------------------------------
nginx调度器:192.168.4.5
192.168.2.5
---------------------------------------------------
web1: 192.168.2.100
web2: 192.168.2.200
---------------------------------------------------

Nginx调度器(自带健康检测)
实现web负载均衡、web高可用

使用Nginx实现Web反向代理功能,实现如下功能:
后端Web服务器两台,可以使用httpd实现
Nginx采用轮询的方式调用后端Web服务器

web1和web2做相同操作:
#yum -y install httpd
#service httpd start
#echo "xx" >/var/www/html/index.html
备注:两台web页面内容不同

Nginx调度器设置:
#tar -xzf nginx-1.8.0.tar.gz
#cd nginx-1.8.0
#./configure --prefix=/usr/local/nginx --with-http_ssl_module
#make && make install

#vim /usr/local/nginx/conf/nginx.conf
... ...
http{
upstream cluster(自定义名称) { //定义集群(源服务器组)
server 192.168.2.100;
server 192.168.2.200;
}
server {
listen 80;
server_name localhost; //也可以改为web主机名
location / {
proxy_pass http://cluster; //将访问的请求调用上面的集群
root html; //可留,可不留,程序查看不了这行及之后
index index.html index.htm;
}
#nginx -s reload

客户端测试:
#firefox http://192.168.4.5/
#curl http://192.168.4.5/ //使用该命令多次访问查看效果

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

Nginx调度器其他设置

Nginx默认分配方式是轮询(Round Robin):逐一循环调度
Weight:指定轮询几率,权重值和访问比率成正比
ip_hash:根据客户端IP 分配固定的后端服务器

upstream 自定义名称{
ip_hash; //相同的客户端找相同的服务器(第一次随机选择哪个后端服务器,以后就固定地选择那个后端服务器)
server 192.168.2.100 max_fails=1 fail_timeout=30;
server 192.168.2.200 max_fails=1 fail_timeout=30;
//定义后端服务器,允许请求失败的最大次数,失败后,暂停提供服务的时间(多少秒)
server 192.168.2.201 weight=3; //定义权重,权重越大,访问量越多
server 192.168.2.202 down; //宕(dang)机的服务器,表示当前server暂时不参与负载。
server 192.168.2.203 backup; //备用服务器
}