nginx的安装与使用

一、Nginx能干什么

  • 作为web服务器
    • 解析http协议,为防火墙内的局域网客户端提供访问Internet的途径
  • 反向代理服务器
    • 客户的请求发送给反向代理服务器,再被转发给后面的N台服务器
  • 邮件服务器
    • 解析邮件相关的协议: pop3/smtp/imap

二、linux上安装

  • 先安装OpenSSL、ZLib、PCRE

    安装openssl时:需要zlib
    ./config shared zlib  --prefix=/usr/local/openssl && make && make install
    
    安装nginx:注意自己的各个安装包路径
    ./configure --with-openssl=../openssl-1.0.1t --with-pcre=../pcre-8.40 --with-zlib=../zlib-1.2.13
    

    如果make时报错 error: this statement may fall through [-Werror=implicit-fallthrough=] 37 | h ^= data[2] << 16;
    nginx报错

三、Nginx的安装位置

  • /usr/local/nginx/sbin/下有可执行程序nginx,为了方便使用:在PATH环境变量里的目录中创建一个该文件的软链接(或者直接把这个目录添加到PATH环境变量中)
    • 查看PATH环境变量
      echo $PATH
      
    • 这里选择在/usr/bin目录里创建软链接
      sudo ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
      

四、基本操作

  • 启动Nginx

    # 假设软连接已经创建完毕
    sudo nginx # 启动
    
  • 关闭Nginx

    # 第一种, 马上关闭
    sudo nginx -s stop
    # 第二种, 等nginx做完当前操作之后关闭
    sudo nginx -s quit
    
  • 重新加载Nginx

    sudo nginx -s reload  # 修改了nginx的配置文件之后, 需要执行该命令
    

五、配置文件

book@100ask:/usr/local/nginx/conf$ vi nginx.conf
  • 配置文件的结构
    • http -> 模块, http相关的通信设置
    • server模块 -> 每个server对应的是一台web服务器
      • location 模块
        • 处理的是客户端的请求
    • mail -> 模块, 处理邮件相关的动作
  • 常用配置项
    • user nobody; # 启动之后的worker进程属于谁
      • 将nobody 改为 root,避免有时权限不够,导致403 Forbidden
    • worker_processes 1; # 设置worker进程的个数
    • error_log logs/error.log; # 错误日志
    • pid logs/nginx.pid; # pid文件, 里面是nginx的进程ID
    • events {
      use epoll; # 多路IO转接模型使用epoll
      worker_connections 1024; // 每个工作的进程的最大连接数
      }
      http下的 每个server模块对应一台web服务器:
    • server{
      listen 80; # web服务器监听的端口, http协议的默认端口
      server_name localhost; # 客户端通过该域名访问服务器
      charset utf8; # 字符串编码
      location { // 模块, 处理客户端的请求
      }
      }

六、部署静态网页

  • 将网页资源(yundisk文件夹)放在服务器的资源根目录(/usr/local/nginx)下:
book@100ask:/usr/local/nginx$ ls
client_body_temp  conf  fastcgi_temp  html  logs  proxy_temp  sbin  scgi_temp  uwsgi_temp  yundisk

book@100ask:/usr/local/nginx/yundisk$ ls
50x.html  cloud_file.html  index.html  login.html  reg.html  static  upload.html  zyupload
  • 服务器要处理的动作
    如果现在客户端要访问http://192.168.232.132/login.html

     # 对应这个请求,服务器要修改nginx.conf:添加一个location
     location 指令(/)
     {
         # 找一个静态网页
         root yundisk;  # 相对于/usr/local/nginx/来找
         # 如果客户端的请求是一个目录, nginx需要找一默认显示的网页。访问login.html不需要这行
         index index.html index.htm;
     }
     # 配置之后重启nginx
     sudo nginx -s reload
    

    同理:
    如果现在客户端要访问http://192.168.232.132/hello/reg.html

    location /hello/
    {
        root yundisk;
    }
    

    特别的,如果是访问目录,应该得到一个默认网页upoad.html:
    如果现在客户端要访问http://192.168.232.132/upload/

    location /upload/
    {
        root yundisk;
        index upload.html;
    }
    

七、反向代理

修改C:\Windows\System32\drivers\etc\hosts,使域名nihao.com、hello.com、hi.com都对应IP 127.0.0.1
在hosts中加入下面内容:
127.0.0.1 nihao.com
127.0.0.1 hello.com
127.0.0.1 hi.com

配置一下windows端,使其作为反向代理服务器。

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;

	# 代理几台服务器就需要几个server模块
    server {
        listen       8088;	#客户端访问反向代理服务器时,反向代理服务器监听的端口
        server_name  nihao.com;#客户端访问反向代理服务器时,需要一个反向代理服务器的域名

		#作为反向代理服务器时,这里面应该是转发指令给服务器
		#/是指令     http://是固定的,后面的yx.test.com是自己起的名字
        location / {
            proxy_pass http://yx.test.com;
			# root   html;
            # index  index.html index.htm;
        }	
    }
	#添加一个代理模块:要和上面的名字对应
	upstream yx.test.com
	{
		server 192.168.232.131:80;
	}
	
	#另一台服务器
	server {
        listen       8088;
        server_name  hello.com;
        location / {
            proxy_pass http://luffy.test.com;
        }	
    }
	upstream luffy.test.com
	{
		server 192.168.232.132:80;
	}
}
效果:访问nihao.com时,被解析为127.0.0.1,本机是一个反向代理服务器,将请求转发给192.168.232.131:80。

八、负载均衡

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    
    server {
        listen       8088;	#客户端访问反向代理服务器时,反向代理服务器监听的端口
        server_name  localhost;#客户端访问反向代理服务器时,需要一个反向代理服务器的域名

        location / {
            proxy_pass http://yx.test.com;
        }	
    }
	upstream yx.test.com	#该模块自动的轮流把请求给下列服务器
	{
		server 192.168.232.131:80;
		server 192.168.232.132:80;
	}
}

可以给不同的服务器设置权重:像下面这样加个weight
upstream yx.test.com	#该模块自动的轮流把请求给下列服务器
{
	server 192.168.232.131:80 weight=2;
	server 192.168.232.132:80 weight=1;
}

一些其它问题:

  1. 使用阿里云时,需要设置安全组,在入方向添加80端口
  2. 连接不上虚拟机时:设置ipv4为自动获取ip、自动获得dns
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值