栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

nginx使用总结

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

nginx使用总结

安装 在线安装 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

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

关闭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。

离线安装

通常生产环境由于安全原因都无法访问互联网。此时就需要进行离线安装,主要有两种方式:源码编译、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 / {
            root   html;
            index  index2.html index.htm;
        }


        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 / {
            root   html;
            index  index3.html index.htm;
        }


        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_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";
   }
}
location配置

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

= 开头表示精确匹配

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

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

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

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

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

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

来源

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博客

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/964703.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号