nginx

一、概述

Nginx可以做静态服务器,可以做反向代理和负载均衡分发请求。

反向代理和正向代理,反向代理以nginx为例,当用户发送大量请求时,请求发送到nginx,nginx背后是一系列服务器servers,nginx把这些请求分发给servers,由这些servers来响应请求,在此过程中,对于servers而言,很明确知道请求是谁发出的,nginx起的只是分配请求的作用,对于用户而言,用户会以为nginx就是server(其实不是,nginx只是用来分发请求的,但对于用户,会以为nginx就是server),所以说反向代理代理的是服务器,屏蔽了真正服务器的信息。

正向代理,以VNP访问facebook为例,用户把请求发送给VNP,VNP再把请求发送给facebook服务器,服务器响应给VNP,VNP再把内容返回给用户,这样对于facebook而言,他会以为用户就是VNP(其实不是,VNP只是代替真正的用户发送请求),所以正向代理代理的就是用户,屏蔽了真正用户的信息。

二、安装

1.安装相关依赖

 yum install gcc-c++  
 yum install pcre pcre-devel  
 yum install zlib zlib-devel  
 yum install openssl openssl--devel 

2.安装

cd /usr/bin    #进入目录
#下载安装包,具体版本可访问http://nginx.org/download查看
wget http://nginx.org/download/nginx-1.8.1.tar.gz    
tar -zxvf nginx-1.8.1.tar.gz    #解压
cd nginx-1.8.1    #进入解压后的目录
./configure    #生成makefile
make    #编译
make instal    #安装

通过whereis nginx命令,可以看到nginx安装目录为/usr/local/nginx

进入该目录下的sbin,./nginx启动Nginx。

查看80端口是否被监听:

#两种方法均可
netstat -atp | grep 80
lsof -i:80    

tip:发现nginx成功启动,并且成功监听端口,但还是访问不到nginx页面,可能是防火墙的问题。

https://www.cnblogs.com/lxwphp/p/8031919.html

centos7开放端口:

# 开放端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
# 重新加载配置
firewall-cmd --reload
# 查看端口列表
firewall-cmd --zone=public --list-ports

直接关闭防火墙:systemctl stop firewalld

3.nginx相关命令:

./nginx -t #检测配置文件是否正常
./nginx -c *.conf #指定配置文件启动nginx
./nginx -s reload    #重新加载配置文件,不需要重启nginx
./nginx -s stop #直接杀死进程
./nginx -s quit #等待Nginx完成任务后退出

或者:

ps aux | grep nginx    #找到nginx相关进程
kill -9 pid    #杀死进程

三、配置文件

# main模块,全局配置

# 指定用户、用户组
#user  nobody;

# 子进程数量,为cpu内核的整数倍
worker_processes  1;

# 错误日志配置【输出级别{debug/info/notice/warn/error}】
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

# pid指定进程id的存储文件位置
#pid        logs/nginx.pid;

# event模块,nginx工作模式配置
events {
    # 最大可以同时接收的连接数量
    worker_connections  1024;
}

# http模块配置
http {
    
    # 在conf目录下包含的文件
    include       mime.types;

    default_type  application/octet-stream;
	
    # 访问记录日志,------------------------------------后面有main,是不是代表全局access日志配置
    #access_log  logs/access.log  main;

    # 建议打开
    sendfile        on;

    # 客户连接超时时间
    keepalive_timeout  65;

    # 数据压缩格式为gzip
    gzip  on;

    #服务器配置,可以配置多个server
    server {

	# 端口
        listen       81;

	# 域名或ip,多个空格区分
        server_name  localhost;
	
	# 访问记录日志
        access_log  logs/host.access.log;
	# 错误日志
	error_log logs/host.error.log;

	# 编码
	charset utf-8;
	
	# 路由配置,
        location / {
	    # 根目录配置
            root   html;
	    # 无请求资源时,显示的内容
            index  index.html index.htm;
        }

	# 错误页面配置
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

-main模块:全局配置

-http模块:HTTP相关配置,包括server

-upstream模块:负载均衡配置

四、nginx功能实现

-静态服务器

把一个静态项目的文件丢到/usr/local/nginx/html下:

cp nginx.conf ./nginx_static.conf #创建静态服务器nginx配置文件
./nginx -c /usr/local/nginx/conf/nginx_static.conf    #指定配置文件启动

nginx_static.conf 中的server配置:

 server {
        listen       81;
        server_name  localhost;

        access_log /var/log/nginx/localhost.access.log;
        error_log  /var/log/nginx/localhost.error.log info;

        location / {
            root   html;
            index  index_.html index_.htm;
        }

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

可以直接访问到主页index_.html,不需要特别配置静态资源的路由。

-反向代理

反向代理当然是和负载均衡一块使用,单独拿出来说,实际意义不大,但是也有助于对反向代理概念的理解吧。

反向代理只要在location中加一个proxy_pass即可。

案例:通过nginx主机192.168.43.208:81代理服务器192.168.43.52:8080。

在服务器(windows)上开启一个tomcat,在tomcat安装目录下,打开bin/startup.bat,打开后出现闪退,查看logs/catalina.log发现错误,然后解决。

其实是想说,很多时候报错了,不用去百度,先在error_log中看看,log中记载的错误还是很清晰的,然后对症下药解决即可。

因为是nginx代理了服务器tomcat,所以要确定8080端口对外开放了。

在cmd中使用命令:netstat -na,可以查看开放的端口,或者使用telnet ip port的形式看能不能连通端口。

如果没有开放端口,要去防火墙设置入站规则,https://blog.csdn.net/a12345555555/article/details/72722161

或者直接关闭防火墙。

nginx配置文件:

server {
        listen       81;
        # 本地机,也就是192.168.43.208
        server_name  localhost;

        access_log /var/log/nginx/localhost.access.log;
        error_log  /var/log/nginx/localhost.error.log info;

        location / {
            #proxy_pass 代理的服务器
            proxy_pass  http://192.168.43.52:8080/;
        }
}

访问地址http://192/168.43.208:81,就直接访问到192.168.43.52:8080上的tomcat了:

-负载均衡

负载均衡使用的是upstream模块,在upstream下有多个服务器,请求到达nginx后,根据一定策略将请求发送给这些服务器。

负载均衡策略:

轮询:为每台服务器配置一个权重,默认权重为1,根据权重来分发请求,权重越大,分发到的请求可能就越多。

iphash:为每一个到访的用户,根据其ip地址,确定唯一hash标识,当下一次用户再来请求资源时,还是请求到相同的服务器,这样可以一定程度上解决session数据共享问题。

fair:智能调度算法,动态的根据服务器响应时间来分配请求。Nginx默认不支持,需要安装upstream_fair模块

url_hash:按照访问的 URL 的 hash 结果分配请求,每个请求的 URL 会指向后端固定的某个服务器

思路:在一台计算机上建立两个tomcat服务器,相当于两台服务器,使用“轮询”的方式对这两台服务器负载均衡。

建立两个tomcat,一个使用8080端口,一个使用8081端口:

https://blog.csdn.net/Ivorybeach/article/details/100604346

nginx配置:

# 代理的多个服务器
# 指定轮询
upstream tomcats{
        # 权重大,访问的概率高
        server 192.168.43.52:8080 weight=3;
        server 192.168.43.52:8081;
    }

server {
        listen       81;
        server_name  localhost;

        access_log /var/log/nginx/localhost.access.log;
        error_log  /var/log/nginx/localhost.error.log info;

        # tomcats为upstream模块名
        location / {
           proxy_pass   http://tomcats;

        }
}

访问http://192.168.43.208:81,可以看到不同端口的tomcat页面,说明负载均衡生效。多次请求之后,发现大部分请求交给8080处理。

后记

以上是centos安装nginx,

在我用manjaro安装nginx时,make报错:

rc/core/ngx_murmurhash.c: 在函数‘ngx_murmur_hash2’中:
src/core/ngx_murmurhash.c:37:11: 错误:this statement may fall through [-Werror=implicit-fallthrough=]
  37 |         h ^= data[2] << 16;
     |         ~~^~~~~~~~~~~~~~~~
src/core/ngx_murmurhash.c:38:5: 附注:here
  38 |     case 2:
     |     ^~~~
src/core/ngx_murmurhash.c:39:11: 错误:this statement may fall through [-Werror=implicit-fallthrough=]
  39 |         h ^= data[1] << 8;
     |         ~~^~~~~~~~~~~~~~~
src/core/ngx_murmurhash.c:40:5: 附注:here
  40 |     case 1:
     |     ^~~~
cc1:所有的警告都被当作是错误

在这篇博客中找到解决方案:

https://www.cnblogs.com/xianqingsong/p/10756451.html

-Werror是令gcc将警告当作错处理
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值