nginx使用总结

安装

环境准备

关闭selinux

记得要关闭selinux,否则监听其他端口时候会出现报nginx: [emerg] bind() to 0.0.0.0:8088 failed (13: Permission denied) 这样得错误

[root@localhost nginx]# getenforce    #查询selinux状态
[root@localhost nginx]# setenforce 0        #临时将selinux关闭
如果需要永久关闭selinux,请编辑/etc/selinux/config文件,将SELINUX=disabled。

关闭防火墙

#centos7关闭防火墙

systemctl stop firewalld.service

#centos7测试环境永久关闭防火墙

systemctl disable firewalld.service

#centos6关闭防火墙

service iptables stop 

#centos6测试环境永久关闭防火墙

chkconfig  iptables off 

在线安装

centos6

更新yum镜像源

1.备份
mv -f /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
2.修改CentOS-Base.repo

# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the 
# remarked out baseurl= line instead.
#
#
 
[base]
name=CentOS-6.6 - Base
baseurl=http://mirrors.aliyun.com/centos-vault/6.6/os/x86_64/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-6
 
[updates]
name=CentOS-6.6 - Updates
baseurl=http://mirrors.aliyun.com/centos-vault/6.6/updates/x86_64/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-6
 
[extras]
name=CentOS-6.6 - Extras
baseurl=http://mirrors.aliyun.com/centos-vault/6.6/extras/x86_64/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-6
 
[centosplus]
name=CentOS-6.6 - Plus
baseurl=http://mirrors.aliyun.com/centos-vault/6.6/centosplus/x86_64/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-6
 
[contrib]
name=CentOS-6.6 - Contrib
baseurl=http://mirrors.aliyun.com/centos-vault/6.6/contrib/x86_64/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-6


3.清理默认缓存包
yum clean all

4.生成yum源缓存
yum makecache

安装nginx

1. 安装epe:
yum install epel-release
2. 安装nginx
yum -y install nginx
3. 启动nginx
service nginx start

4.配置开机自启动

systemctl enable nginx.service

centos7

更新yum镜像源

1.更新之前请先安装wget,下载repo要用
yum install -y wget

2.备份并下阿里云的base和epel源
mv -f /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

3.清理默认缓存包
yum clean all

4.生成yum源缓存
yum makecache

5.更新yum源
yum -y update

安装nginx

1. 安装epe:
yum install epel-release
2. 安装nginx
yum -y install nginx
3. 启动nginx
service nginx start

4.配置开机自启动

systemctl enable nginx.service

离线安装

通常生产环境由于安全原因都无法访问互联网。此时就需要进行离线安装,主要有两种方式:源码编译、rpm包安装。源码编译耗费时间长且缺乏编译环境,所以一般都选择使用离线 rpm 包安装。

#配置一台相同系统的虚拟机,配置好yum源
#查看依赖
yum deplist nginx

# 安装yum-utils
yum -y install yum-utils
 
# 下载 ansible 全量依赖包
repotrack nginx -p /root/local_nginx

#将local_nginx拷贝到离线的系统
cd local_nginx

#当执行下面的语句后,系统会自动选出所需的依赖包进行安装,不需要的就会自动清理。
rpm -Uvh *.rpm --nodeps --force

#启动nginx
service  nginx start

Nginx常用命令

#配置位置:
vi /etc/nginx/nginx.conf
vi /etc/nginx/conf.d/default.conf
修改配置以后,需要重启服务
#检查配置

nginx -t
nginx -t -c /etc/nginx/nginx.conf
#重新加载
nginx -s reload
#也可以直接restart重启服务
service nginx restart

#重新打开日志文件
#nginx -s reopen
#查看Nginx的版本号:
nginx -V
#快速停止或关闭Nginx
nginx -s stop
#正常停止或关闭Nginx
nginx -s quit

常用配置实例

根据 nginx.conf中的 include /etc/nginx/default.d/*.conf 。可以将自定义的配置配置在default.d

正向代理和反向代理区别

区别在于代理的对象不一样,正向代理代理的对象是客户端,反向代理代理的对象是服务端。

 反向代理

准备server

server_8283.conf
用于模拟自己的服务
新增一个server,首页文件index2.html,模拟自己的接口服务
server_8282.conf

 server {
        listen       8282;
        server_name  localhost2;


        location / {
              default_type text/html;
              return 200 "Hello, Nginx! this is port 8282\n";
        }


        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }


    }

新增一个server,首页文件改为index3.html,模拟自己的接口服务

server_8283.conf

server {
        listen       8283;
        server_name  localhost2;


        location / {
              default_type text/html;
              return 200 "Hello, Nginx! this is port 8283\n";
        }


        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }


    }

反向代理

proxy_fanxiang.conf

upstream domain {
  server localhost:8283 weight=1;
  server localhost:8282 weight=1 ;
}
 
server {
        listen       8284;
        server_name  localhost3;

        location / {
		    proxy_next_upstream  error timeout http_502 http_503 http_504 ;
			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_set_header X-NginX-Proxy true;
            proxy_pass http://domain;

        }
}

验证
刷新http://localhost:8284/如果页面结果不断在所代理的服务之间来回跳,说明配置成功

配置 backup

proxy_bakup.conf

upstream domain2 {
  server localhost:8283 weight=1;
  server localhost:8282 weight=1 backup;
}
 
server {
        listen       8285;
        server_name  localhost4;

        location / {
		    proxy_next_upstream  error timeout http_502 http_503 http_504 ;
			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_set_header X-NginX-Proxy true;
            proxy_pass http://domain2;

        }

 
}

验证:
刷新http://localhost:8285 页面一直在8283的服务,修改8283到一个不通的端口模拟8283挂掉,刷新http://localhost:8285 页面到了8282的服务,则配置成功

动静分离

proxy_seperator.conf

upstream tomcat {
	server 192.168.10.77:8080;
}
server {
  listen       8181;
  server_name localhost; 
  location /dest/ {
        root  /u01/isi/zh/;
        index  index.html;
  }

 location /zh_sys {
	proxy_pass http://tomcat/zh_sys;
	proxy_redirect off;
	proxy_set_header Host $host;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_cookie_path  /zh_sys /zh_sys;
	}
}

注意
1.nginx.conf中的user必须要静态文件目录/u01/isi/zh/的权限
2.http访问 ip:8181/dest/index.html访问的是/u01/isi/zh/dest/index.html

简单反向代理

使用场景:
比如nginx所在主机可以映射外网端口,但是169.49:8888不能映射外网,就可以将nginx主机的8182端口转发到49的8888端口

forward.conf

server {
  listen       8182;
  server_name localhost; 
location /group192 {
            proxy_pass   http://192.168.169.49:8888/group192;
                proxy_set_header   X-Real-IP $remote_addr;
                proxy_set_header  Host  $host:$server_port;
                proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
        }
location /group1 {
            proxy_pass   http://192.168.169.49:8888/group1;
                proxy_set_header   X-Real-IP $remote_addr;
                proxy_set_header  Host  $host:$server_port;
                proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
        }
}

自签名证书配置https

Nginx为了支持Https需要安装http_ssl_module模块。在编译时需要带上--with-http_ssl_module参数。

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

然后通过./nginx -V查看有没有--with-http_ssl_module参数。如果没有需要更新nginx

openssl生成公私钥

无论是客户端还是服务端,都可以使用openssl命令来生成公私钥,前提是需要安装好openssl。

生成服务端私钥
openssl genrsa [-out filename] [numbits]

#比如:生成一个名为server.key的私钥,长度1024。

openssl genrsa -out server.key 1024

生成服务端公钥证书
openssl req -new -x509 [-key keyfile] [-out crtfile] [-days numdays]

#比如:生成一个名为server.crt的证书,有效期10年。

openssl req -new -x509 -key server.key -out server.crt -days 3650

依次会要求输入国家、省市、公司单位、域名、邮箱等信息

将证书拷贝到指定位置

mkdir /etc/nginx/ssl/
cp server.key /etc/nginx/ssl/
cp server.crt /etc/nginx/ssl/

443端口配置

server_443.conf

server {
      listen       443 ssl;
    server_name  localhost;

    ssl_certificate      /etc/nginx/ssl/server.crt;  # server公钥证书
    ssl_certificate_key  /etc/nginx/ssl/server.key;  # server私钥

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

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on; 
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

80端口强制转到443端口

server_80.conf

server {
      #监听80端口,强制转到443端口,进行https访问
    listen  80;
    server_name test.cn;

  #return 301 https://192.168.10.130:443$request_uri;
  rewrite ^(.*) https://$host$1 permanent;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}

443端口代理其他端口

例如希望443端口代理某个8282端口服务

443端口配置

server {
      listen       443 ssl;
    server_name  localhost;

    ssl_certificate      /etc/nginx/ssl/server.crt;  # server公钥证书
    ssl_certificate_key  /etc/nginx/ssl/server.key;  # server私钥

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

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on; 
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

 #代理8282端口服务
  location /8282 {
               #proxy_pass   http://192.168.10.130:8282;
               proxy_pass   http://$host:8282; //这样写更灵活
                proxy_set_header   X-Real-IP $remote_addr;
                proxy_set_header  Host  $host:$server_port;
                proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
        }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

8282端口服务

server8282.conf

server {
    listen  8282;
    server_name test.cn;
  
    location / {
        root   /usr/share/nginx/html;
        index  index2.html;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

负载均衡

IP_HASH

当IP进行重复访问时会被指定到上次访问的服务器,可以解决动态网站session共享问题

server_hash.conf

 upstream wp_ip_hash{
     ip_hash;
     server 192.168.10.130:8283;
     server 192.168.10.130:8284;
     server 192.168.10.130:8285;
 }
server {
    listen  8282;
    server_name test.cn;
   location / {
             #表示代理转发到 upstream wp_ip_hash
        proxy_pass http://wp_ip_hash;
        #表示传递时请求头不变, $host是nginx内置变量,表示的是当前的请求头,proxy_set_header表示设置请求头
        proxy_set_header            Host $host;
        # 表示传递时来源的ip还是现在的客户端的ip
        proxy_set_header            X-Real-IP $remote_addr;
        proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;

        # 表示反向代理发送的HTTP协议的版本是1.1,HTTP1.1支持长连接(websocket)
        proxy_http_version 1.1;
        # 表示设置Upgrade不变(websocket)
        proxy_set_header Upgrade $http_upgrade;
        #表示如果 $http_upgrade为upgrade,则请求为upgrade(websocket),如果不是,就关闭连接
        proxy_set_header Connection "upgrade";
   }
}

基于URL的HASH 

当客户端多次访问同一个地址时分配到固定的节点

url_hash.conf

   upstream wp_url_hash{
       hash $request_uri consistent;
     server 192.168.10.130:8283;
     server 192.168.10.130:8284;
     server 192.168.10.130:8285;
   }
server {
    listen  8282;
    server_name test.cn;
   location / {
        #表示代理转发到
        proxy_pass http://wp_url_hash;
        #表示传递时请求头不变, $host是nginx内置变量,表示的是当前的请求头,proxy_set_header表示设置请求头
        proxy_set_header            Host $host;
        # 表示传递时来源的ip还是现在的客户端的ip
        proxy_set_header            X-Real-IP $remote_addr;
        proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;

        # 表示反向代理发送的HTTP协议的版本是1.1,HTTP1.1支持长连接(websocket)
        proxy_http_version 1.1;
        # 表示设置Upgrade不变(websocket)
        proxy_set_header Upgrade $http_upgrade;
        #表示如果 $http_upgrade为upgrade,则请求为upgrade(websocket),如果不是,就关闭连接
        proxy_set_header Connection "upgrade";
   }
}


最少连接数轮询

哪个节点当前的连接数少就分配给哪个节点处理

less_conn.conf

   upstream wp_lease_conn{
    least_conn;
     server 192.168.10.130:8283;
     server 192.168.10.130:8284;
     server 192.168.10.130:8285;
   }
server {
    listen  8282;
    server_name test.cn;
   location / {
        #表示代理转发到
        proxy_pass http://wp_lease_conn;
        #表示传递时请求头不变, $host是nginx内置变量,表示的是当前的请求头,proxy_set_header表示设置请求头
        proxy_set_header            Host $host;
        # 表示传递时来源的ip还是现在的客户端的ip
        proxy_set_header            X-Real-IP $remote_addr;
        proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;

        # 表示反向代理发送的HTTP协议的版本是1.1,HTTP1.1支持长连接(websocket)
        proxy_http_version 1.1;
        # 表示设置Upgrade不变(websocket)
        proxy_set_header Upgrade $http_upgrade;
        #表示如果 $http_upgrade为upgrade,则请求为upgrade(websocket),如果不是,就关闭连接
        proxy_set_header Connection "upgrade";
   }
}

轮询(默认)

客户端发出的每个请求将按照时间顺序逐一分配到不同的后端服务器,如后端服务器down掉,能自动剔除。

upstream backserver {
    server 192.168.1.10;
    server 192.168.1.11;
}

权重

weight 代表权重,默认为1,权重越高被分配的客户端也就越多。
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况,也就是说:哪个 server 的连接数少,路由就到哪个 server 中去。

upstream backserver {
    server 192.168.1.10 weight=3;
    server 192.168.1.11 weight=7;
}

fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配

upstream backserver {
    server server1;
    server server2;
    fair;
}

高可用集群

图示

 高可用配置:

keepalived+lvs实现nginx高可用集群_csdncjh的博客-CSDN博客# 关闭防火墙关闭selinux192.168.10.130192.168.10.131# 安装ipvssudo yum -y install ipvsadm#启动ipvssudo ipvsadm#查看是否支持lvs:sudo lsmod |grep ip_vs 出现如下结果说明安装成功#配置虚拟ip我们需要配置虚拟ip,这是因为我们使用的lvs调度器是DR模式,前面我们讲到过,这种模式下,对客户端的响应是真实服务器直接返回给客户端的,而真实服务器需要将响应报文中的源ip修改为虚拟ip,这里配置的虚https://blog.csdn.net/csdncjh/article/details/125239357?spm=1001.2014.3001.5501

location配置

语法规则:location [=|~|~*|^~] /uri/ { … }

= 开头表示精确匹配

^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。

~ 开头表示区分大小写的正则匹配

~*  开头表示不区分大小写的正则匹配

!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则

/ 通用匹配,任何请求都会匹配到。

多个location配置的情况下匹配顺序为
首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求

限制ip的访问频率

nginx限制ip访问频率_csdncjh的博客-CSDN博客Nginx通过limit_conn_zone 和 limit_req_zone对同一个IP地址进行限速限流,可防止DDOS/CC和flood攻击 。limit_conn_zone是限制同一个IP的连接数。而一旦连接建立之后 。客户端就会通过这次的连接发送多次请求,那么在此期间的请求频率和速度进行限制就需要limit_req_zone连接数限制,相当于限制了nginx与客户端之间的管道个数http区块的配置:server区块配置如下;请求频率 限制,相当于限制了nginx与客户端管道之间水的流速http区https://blog.csdn.net/csdncjh/article/details/125434148?spm=1001.2014.3001.5502

配置ip白名单

nginx配置ip黑名单_csdncjh的博客-CSDN博客在http模块最后加上配置 黑名单设置: 黑名单示例:black_ip_task.sh创建计划任务白名单设置示例来源Nginx 动态添加IP黑名单_2014Team的博客-CSDN博客_nginx 动态黑名单https://blog.csdn.net/csdncjh/article/details/125434234?spm=1001.2014.3001.5502

来源

centos6 yum 源失效问题解决办法,头疼的老机器 - 云+社区 - 腾讯云

yum 下载全量依赖 rpm 包及离线安装(终极解决方案)_tfner123的博客-CSDN博客_yum离线安装

Nginx配置Https单向认证、双向认证以及多证书配置

解决nginx报错:nginx: [emerg] bind() to 0.0.0.0:8088 failed (13: Permission denied)_weixin_30631587的博客-CSDN博客

一文带你读懂Nginx的负载均衡 - 知乎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值