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的反向代理

  1. 正向代理:正向代理,就是客户端将自己的请求率先发给代理服务器,通过代理服务器将请求转发给服务器。我们常用的VPN就是一种代理服务器,为了可以连上国外的网站,客户端需要使用一个可以连接外网的服务器作为代理,并且客户端能够连接上该代理服务器。
  2. 反向代理:反向代理是代理服务器端,正向代理是代理客户端。
    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. 基于域名的虚拟主机