Ubuntu下Nginx的编译及安装

  1. 将nginx的压缩包nginx-xxx.tar.gz上传到Linux服务器
  2. 安装C语言的编译环境GCC
  3. 安装依赖包PCRE库
sudo apt-get install libpcre3-dev libpcre3
# 验证是否安装成功
pcre-config --version
  1. 安装依赖包zlib
1. 查看zlib是否已经安装
dpkg -l | grep zlib
2. sudo apt-get install zlib1g-dev 
  1. 安装依赖包openssl
sudo apt-get install openssl libssl-dev
  1. 安装nginx
# --prefix指定安装路径
./configure --prefix=/usr/local/nginx
# 编译并安装
make && make install
# 查看nginx的安装位置
whereis nginx

# 检验是否安装成功
# 方式1:检查版本信息
cd /usr/local/nginx/sbin
./nginx -v
# 方式2:在浏览器中输入
http://主机IP:80
  1. 启动Nginx
# 方式1
cd /usr/local/nginx/sbin
./nginx
# 方式2:通过配置文件启动
# -c参数指定nginx.conf配置文件的位置
/usr/local/nginx/sbin/nginx -c
/usr/local/nginx/conf/nginx.conf
  1. 检查Nginx是否启动
# 查看是否启动成功
ps -ef | grep nginx
# nginx 体系结构由 master 进程和其 worker 进程组成
  1. 关闭nginx
# 方式1:优雅关闭Nginx,这种关闭方式会处理完请求后再关闭
kill -QUIT 主进程号的pid
# 方式2:快速关闭Nginx,这种关闭方式不管请求是否处理完成,直接关闭
kill -TERM 主进程号的pid

./nginx -s stop
  1. 重新加载nginx配置文件(无需重启服务,加载配置信息)
./nginx -s reload

Nginx的反向代理

  • 正向代理:正向代理,就是客户端将自己的请求率先发给代理服务器,通过代理服务器将请求转发给服务器。我们常用的VPN就是一种代理服务器,为了可以连上国外的网站,客户端需要使用一个可以连接外网的服务器作为代理,并且客户端能够连接上该代理服务器。
  • 反向代理:反向代理是代理服务器端,正向代理是代理客户端。
    image.png

    Nginx配置文件说明及Nginx主要应用

    1.Nginx的核心配置文件

    核心配置文件即conf目录下的nginx.conf文件

    #配置worker进程运行用户 nobody也是一个linux用户,一般用于启动程序,没有密码
    user  nobody;  
    #配置工作进程数目,根据硬件调整,通常等于CPU数量或者2倍于CPU数量
    worker_processes  1;  
    
    #配置全局错误日志及类型,[debug | info | notice | warn | error | crit],默认是error
    error_log  logs/error.log;  
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    
    pid        logs/nginx.pid;  #配置进程pid文件 
    
    
    ###====================================================
    
    
    #配置工作模式和连接数
    events {
        worker_connections  1024;  #配置每个worker进程连接数上限,nginx支持的总连接数就等于worker_processes * worker_connections
    }
    
    ###===================================================
    
    
    #配置http服务器,利用它的反向代理功能提供负载均衡支持
    http {
        #配置nginx支持哪些多媒体类型,可以在conf/mime.types查看支持哪些多媒体类型
        include       mime.types;  
        #默认文件类型 流类型,可以理解为支持任意类型
        default_type  application/octet-stream;  
        #配置日志格式 
        #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
        #                  '$status $body_bytes_sent "$http_referer" '
        #                  '"$http_user_agent" "$http_x_forwarded_for"';
    
        #配置access.log日志及存放路径,并使用上面定义的main日志格式
        #access_log  logs/access.log  main;
    
        sendfile        on;  #开启高效文件传输模式
        #tcp_nopush     on;  #防止网络阻塞
    
        #keepalive_timeout  0;
        keepalive_timeout  65;  #长连接超时时间,单位是秒
    
        #gzip  on;  #开启gzip压缩输出
    	
    	###-----------------------------------------------
    	
    
        #配置虚拟主机
        server {
            listen       80;  #配置监听端口
            server_name  localhost;  #配置服务名
    
            #charset koi8-r;  #配置字符集
    
            #access_log  logs/host.access.log  main;  #配置本虚拟主机的访问日志
    
    	#默认的匹配斜杠/的请求,当访问路径中有斜杠/,会被该location匹配到并进行处理
            location / {
    	    #root是配置服务器的默认网站根目录位置,默认为nginx安装主目录下的html目录
                root   html;  
    	    #配置首页文件的名称
                index  index.html index.htm;  
            }		
    
            #error_page  404              /404.html;  #配置404页面
            # redirect server error pages to the static page /50x.html
            #error_page   500 502 503 504  /50x.html;  #配置50x错误页面
            
    	#精确匹配
    	location = /50x.html {
                root   html;
            }
    
    		#PHP 脚本请求全部转发到Apache处理
            # proxy the PHP scripts to Apache listening on 127.0.0.1:80
            #
            #location ~ \.php$ {
            #    proxy_pass   http://127.0.0.1;
            #}
    
    		#PHP 脚本请求全部转发到FastCGI处理
            # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
            #
            #location ~ \.php$ {
            #    root           html;
            #    fastcgi_pass   127.0.0.1:9000;
            #    fastcgi_index  index.php;
            #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            #    include        fastcgi_params;
            #}
    
    		#禁止访问 .htaccess 文件
            # deny access to .htaccess files, if Apache's document root
            # concurs with nginx's one
            #
            #location ~ /\.ht {
            #    deny  all;
            #}
        }
    
    	
    	#配置另一个虚拟主机
        # another virtual host using mix of IP-, name-, and port-based configuration
        #
        #server {
        #    listen       8000;
        #    listen       somename:8080;
        #    server_name  somename  alias  another.alias;
    
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
    
    	
    	#配置https服务,安全的网络传输协议,加密传输,端口443,运维来配置
    	#
        # HTTPS server
        #
        #server {
        #    listen       443 ssl;
        #    server_name  localhost;
    
        #    ssl_certificate      cert.pem;
        #    ssl_certificate_key  cert.key;
    
        #    ssl_session_cache    shared:SSL:1m;
        #    ssl_session_timeout  5m;
    
        #    ssl_ciphers  HIGH:!aNULL:!MD5;
        #    ssl_prefer_server_ciphers  on;
    
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
    }
    
    
    2.Nginx主要应用
    1. 静态网站部署
    2. 负载均衡
    3. 静态代理
    4. 动静分离
    5. 虚拟主机

    静态网站部署

    1.示例:将ace-master这个静态网站部署到Nginx服务器上
    image.png
    1. 修改nginx.conf配置文件
    # 这里接收/ace-master请求,去磁盘目录/root下找资源
    location /ace-master {
        root /root;
        index login.html;
    }
    
    1. 重新加载nginx配置文件
    /usr/local/nginx -s reload
    
    1. 浏览器中输入http://IP地址:端口号/ace-master进行访问,默认访问login.html

    Nginx的负载均衡

    1.概述

    将多台机器组成一个集群对外提供服务,但是网站对外提供的访问入口只有一个,比如说www.baidu.com,如何将用户的请求分发到集群中不同的机器上,就是负载均衡的作用。负载均衡通常是指将请求"均匀"分摊到集群中多个服务器节点上执行
    https://upload-images.jianshu.io/upload_images/17728742-6e25dad3e5aa09d7.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240&ynotemdtimestamp=1715854427688

    2.Nginx实现负载均衡案例

    Nginx 通过在 nginx.conf文件进行配置即可实现负载均衡

    1. 在Linux服务器上部署两台Tomcat,其中一台端口号8080,另一台8090
    // 修改conf目录下的server.xml配置文件中的多个端口号
    // 只要两台tomcat中的以下端口不一样即可
    
    1.停止服务端口
    <Server port="8005" shutdown="SHUTDOWN">
    
    2. HTTP端口8080(8443是https端口,不是强制https访问不用修改)
    
    <Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" />
    
    3.AJP端口8009
    <Connector protocol="AJP/1.3"
    address="::1"
    port="8009"
    redirectPort="8443" />
    
    1. 将 myweb.war 上传到两台 tomcat 服务器安装目录的 webapps 目录下
    2. 启动两台tomcat,并在浏览器中访问进行测试
    3. 配置nginx(修改conf目录下的nginx.conf文件)
    1. 在http模块下添加
         upstream www.myweb.com{
                server 120.55.87.98:8080;
                server 120.55.87.98:8090;
        }
    2. 在server模块上添加
        location /myweb{
                proxy_pass http://www.myweb.com;
        }
    
    1. 浏览器中访问nginx,地址http://120.55.87.98/myweb/进行测试
    3. Nginx的负载均衡的多种实现方式
    1.加权轮询:每个请求按一定比例分发到不同的后端服务器,weight值越大访问的比例越大,用于后端服务器性能不均的情况
    image.png
    # 在upstream块中添加weight参数
        例如:
        upstream backserver { 
         server 192.168.0.14 weight=5; 
         server 192.168.0.15 weight=2; 
        }
    # 添加完成后执行 ./nginx -s reload 
    

    2.IP哈希(也叫IP绑定):每个请求按访问 ip 的 hash 值分配,这样每个IP发出的请求会固定访问一个后端服务器,可以解决会话 Session 丢失的问题

    示例:
    算法:hash("124.207.55.82") % 2 = 0, 1 #模2因为两台Tomcat
    upstream backserver { 
     ip_hash; 
     server 127.0.0.1:8080; 
     server 127.0.0.1:9090; 
    }
    
    
    1. url哈希
    2. 最少连接:web 请求会被转发到连接数最少的服务器上
    // 示例
    upstream backserver { 
     least_conn;
     server 127.0.0.1:8080; 
     server 127.0.0.1:9090; 
    }
    
    4.负载均衡其他几个配置
    upstream backserver { 
     server 127.0.0.1:9100;
    #其它所有的非 backup 机器 down 的时候,才请求 backup 机器
    # backup表示备份
    # 该server对于服务升级有用
     server 127.0.0.1:9200 backup; 
    }
    
    upstream backserver { 
        server 127.0.0.1:9100;
        #down 表示当前的 server 是 down 状态,不参与负载均衡
        server 127.0.0.1:9200 down; 
    }
    

    静态代理

    把所有静态资源的访问改为访问 nginx,而不是访问 tomcat,这种方式叫静态代理。因为nginx更擅长于静态资源的处理,性能更好,效率更高。

    1. 方式1:在 nginx.conf的location中配置静态资源的后缀
    当访问静态资源,则从 linux 服务器/opt/static 目录下获取(举例)
    location ~ .*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid
    |doc|ppt|pdf|xls|mp3|wma)$ {
     root /opt/static;
    }
    
    说明:
    ~ 表示正则匹配的开始,也就是说后面的内容可以是正则表达式匹配
    ➢ 第一个点 . 表示任意字符
    ➢ *表示一个或多个字符
    ➢ \. 是转移字符,是后面这个点的转义字符
    ➢ | 表示或者
    ➢ $ 表示结尾
    
    
    1. 方式2:在nginx.conf的location中配置静态资源所在目录实现
    当访问静态资源,则从 linux 服务器/opt/static 目录下获取(举例)
    location ~ .*/(css|js|img|images) {
     root /opt/static;
    }
    
    将静态资源放入 /opt/static目录下,然后用户访问时由 nginx 返回这些静态资源
    xxx/css
    xxx/js
    xxx/img
    xxx/images
    

    动静分离

    1. 动态资源,如 jsp 由 tomcat 或其他 web 服务器完成
    2. 静态资源,如图片、css、js 等由 nginx 服务器完成

    虚拟主机

    虚拟主机,就是把一台物理服务器划分成多个“虚拟”的服务器,这样我们的一台物理服务器就可以当做多个服务器来使用,从而可以配置多个网站。

    Nginx 提供虚拟主机的功能,就是为了让我们不需要安装多个 Nginx,就可以运行多个域名不同的网站。

    Nginx 下,一个 server 标签就是一个虚拟主机。nginx 的虚拟主机就是通过nginx.conf中server节点指定的,想要设置多个虚拟主机,配置多个 server 节点即可;

    1.配置虚拟主机方式
    1. 基于端口的虚拟主机(了解)
    2. 基于域名的虚拟主机