Nginx从入门到放弃Nginx详细教程

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 在下载之前,我们先把编译工具及库文件安装一下。yum install -y gcc pcre pcre-devel openssl openssl-devel gd gd-devel然后来到:http://nginx.org/en/download.html

1 Nginx环境搭建


1.1 下载和安装Nginx

在下载之前,我们先把编译工具及库文件安装一下。

yum install -y gcc pcre pcre-devel openssl openssl-devel gd gd-devel

然后来到:http://nginx.org/en/download.html

下载稳定版即可:

20200930110115806.png


在下载好之后,上传到Linux:我这边直接使用的rz命令。

然后解压:tar -zxvf nginx-1.18.0.tar.gz

然后进入解压的目录:cd nginx-1.18.0,目录结构如下,有一个可执行文件configure

20200930111132829.png


然后执行configure,配置安装路径:./configure --prefix=/usr/local/nginx

最后就能编译和安装了:make & make install

如果没安装编译工具及库文件就会失败:

20200930111636655.png


解决方法是安装下前置库:yum install -y gcc pcre pcre-devel openssl openssl-devel gd gd-devel

然后删除目录rm -rf nginx-1.18.0,重新执行上面的步骤即可。

安装成功后,我们进入/usr/local目录,即可看见nginx目录

20200930112731992.png


1.2 启动Nginx的几种方式


1.2.1 直接启动

进入到/usr/local/nginx/sbin,该目录下就一个nginx,执行就启动了,启动完成后,会有两个进程,主进程与工作进程。

20200930114314869.png


然后访问一下服务器即可看到(如果用的阿里云主机访问不了,去阿里云开放一下80端口!):

20200930114420759.png


1.2.2 通过指定配置文件方式启动

先杀掉刚刚启动的nginx:kill 16581

然后启动命令如下(使用这种全路径可不用进入到sbin目录即可执行):

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

2020093011530653.png


1.2.3 重启Nginx

如果修改了配置文件,可以选择使用重启命令:./nginx -s reload


2 Nginx配置文件说明

#user  nobody;
#工作进程,一般与cpu数量一样就行
worker_processes  1;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
  #一个工作进程的最大连接数,最大65535,nginx并发总数等于 worker_processes*worker_connections
    worker_connections  1024;
}
#配置http服务器
http {
  #能处理的文件类型,基本包含了
    include       mime.types;
  #如果真有未知类型的,直接以io流返回,下载后随便处理
    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  logs/access.log  main;
  #开启高效文件传输模式
    sendfile        on;
  #防止网络阻塞,一般生产环境会开启
    #tcp_nopush     on;
    #keepalive_timeout  0;
  #长连接超时时间,单位秒
    keepalive_timeout  65;
  #开启gzip压缩传输,会把代码里里空格换行啥的删除掉,文件就小了啊
    #gzip  on;
  #配置虚拟主机,一个http里可以有多个server
    server {
        listen       80;#监听的端口
        server_name  localhost;#域名或ip
    #默认是utf-8
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
    #当请求路径有/则匹配(访问域名后默认会有/,浏览器隐藏了而已,就和端口80一样隐藏了)
        location / {
      #配置根目录,默认就是nginx安装目录下的html目录
            root   html;
      #配置首页文件名称
            index  index.html index.htm;
        }
    #配置404页面
        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html
        #
    #配置50x错误页面
        error_page   500 502 503 504  /50x.html;
        #精准匹配,只有请求地址/50x.html时才匹配成功
    location = /50x.html {
            root   html;
        }
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
        # 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;
        #}
        # 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 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;
    #    }
    #}
}


3 搭建静态服务器

先把静态网页项目传到服务器,这里我使用的时xftp,在xshell里点击即可,如果第一次应该是要安装的:

20200930150811419.png


然后编辑nginx.conf,这里写不了几个字,但是还是推荐使用sz命令下载到windows上编辑舒服,然后再上传时使用rz -y命令,如果不加-y会失败,也没有啥解决方法提示,加上-y就是覆盖文件的意思。

然后配置一下匹配路径,其实就在/后面加了目录名,根路径还是html,如果放其他地方记得改下root就行了:

20200930152014219.png


然后直接访问即可看到网站首页了,我这边不需要重启服务器,如果不行重启试试。

image.png


4 负载均衡


4.1 Nginx常用的负载均衡策略

Nginx常用的负载均衡策略分为4种,分别为:

●  轮询(默认):即每台服务器轮流处理请求,适合在服务器性能一致情况下使用。

●  权重:该模式适合在服务器性能不一致情况下使用,通过设置不同的权重去处理不同数量的请求。

●  ip_hash:每次按访问的ip的hash值分配服务器,用户会固定的访问到一台服务器,可以解决session丢失问题。

●  最少连接:该模式会访问当前连接最少的服务器,往往连接最少的很可能是性能最差劲的服务器,所以分配过去可能会压力过大,不是很推荐使用。


4.2 准备环境

我们需要两台以上的tomcat服务器做测试,所以先准备好环境,没有tomcat可以先下载:参考:https://blog.csdn.net/qq_42449106/article/details/106583083

复制目录:cp -r /usr/local/tomcat /usr/local/tomcat-8081,cp -r /usr/local/tomcat /usr/local/tomcat-8082

配置环境变量:vim /etc/profile

export CATALINA_HOME_8081='/usr/local/tomcat-8081'

export CATALINA_BASE_8081='/usr/local/tomcat-8081'

export CATALINA_HOME_8082='/usr/local/tomcat-8082'

export CATALINA_BASE_8082='/usr/local/tomcat-8082'

然后修改/usr/local/tomcat-8081/bin/catalina.sh,找到这个位置,添加代码

image.png


export CATALINA_BASE=$CATALINA_BASE_8081

export CATALINA_HOME=$CATALINA_HOME_8081

然后修改conf目录下的server.xml:

image.png



然后继续修改端口,这个端口可以随便写,只要不冲突就行,默认是8005,用途参考:https://blog.csdn.net/BigDevil_/article/details/105242985

image.png


两个服务器配置都这样改改就行了,然后放两个页面进去测试一下,为了简单方便的测试,两个页面分别写上对应端口号方便查看结果,test.html代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>负载均衡测试</title>
</head>
<body>
<h1 style="color:red">服务器端口:8081</h1>
<h1>这是测试负载均衡的页面主要内容</h1>
<h1>这是测试负载均衡的页面主要内容</h1>
<h1>这是测试负载均衡的页面主要内容</h1>
</body>
</html>


然后运行试试:

/usr/local/tomcat-8081/bin/startup.sh | tail -f /usr/local/tomcat-8081/logs/catalina.out &

两个服务器都启动成功后,访问看看:


20200930165929442.png


4.3 轮询模式(默认)

两个端口号,不可能让用户自己记住端口号吧,来个配置,实现默认的轮询模式的负载均衡:

20200930171051882.png


修改配置后记得传到服务器:rz -y,然后重启一下nginx,访问一下,这次不需要输入端口即可访问,刷新一次就会变一次端口:

20200930171413619.png

4.4 权重模式

20200930175740713.png


这样配置访问的顺序为:8081 8081 8082 8081 8081 8082...


4.5 ip_hash

20200930180120282.png


这样配置后访问页面就一直是一个端口了。


4.6 最少连接

20200930180559206.png


该方式不方便测试。也不推荐使用。


4.7 其他配置

●  down:当前服务器已经挂断,不再处理任何请求。

●  backup:备份服务器,默认不会处理任何请求,只有当其他非备份服务器挂掉才会请求这个服务器。,

用法均为:server ip:port down/backup。

 

5 静态代理

在上面的test.html页面加入一张图片作为静态资源:<img src="images/dapao.jpg">,我们不用在tomcat里加入这个图片,但是还是得放在某个地方才行,作为学习,我放了三个地方进行测试:

/usr/local/nginx/html/my_static_proxy/testLoadBalancing/images

/opt/static/testLoadBalancing/images

/usr/local/nginx/html/my_static_proxy/testLoadBalancing/images

testLoadBalancing是我项目名称,所以images目录必须在改目录下。

上面三个目录对应下面得配置:

    location ~ .*/(css|js|img|images|image|font|fonts) {
      #root html/my_static_proxy
            #root   /opt/static;
      root  /usr/local/nginx/my_static_proxy;
    }


~ 就是使用正则,记得左右空格

. 匹配除换行符以外的任意一个字符

* 任意字符

其他参考文章:https://www.jb51.net/article/149053.htm

上面的代码一定注意空格啥的,反正我调整了半小时,reload服务器没报错但是就访问不了图片,后来改改改的发现reload有时还不起作用了,使用./nginx -s stop停止后,再启动才重新读取了配置。。。后来使用reload又可以了,不知道是哪里有问题,可能是自己懵了。

然后访问可以看到图片是可以显示的:

20200930213406329.png


6 动静分离和虚拟主机

其实这个和静态代理差不多,只不过配置了多个nginx虚拟主机进行静态代理。


20200930232240143.png


创建个新项目NginxDemo,放个jsp文件(动态资源),里面包含了一张图片(静态资源),运行两个tomcat

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
  <h1>这是一个jsp页面!!!端口--8081</h1>
  <img src="images/dapao.jpg">
</body>
</html>


然后开始配置:


首先要配置两个nginx静态服务器,我们当然没有更多的服务器资源,所以只能改改端口假装有了:

  #81和82这两个服务器做静态资源的代理
  server {
    listen       81;
    server_name  localhost;
    location / {
            root   html;
            index  index.html index.htm;
        }
    location ~ .*/(css|js|img|images|image|font|fonts) {
      root  /usr/local/nginx/my_static_proxy;
    }
  }
  server {
    listen       82;
    server_name  localhost;
    location / {
            root   html;
            index  index.html index.htm;
        }
    location ~ .*/(css|js|img|images|image|font|fonts) {
      root  /usr/local/nginx/my_static_proxy;
    }
  }

注意了,我们这个项目的图片只放在了/usr/local/nginx/my_static_proxy/NginxDemo/images里的,不像静态分离那节放了几个地方...


然后配置负载均衡:

  #静态资源代理
  upstream static_proxy {
    server 47.115.58.135:81;
    server 47.115.58.135:82;
  }


然后配置80端口的静态资源监听,让它去均衡的访问81和82那两个服务器,80这个只管代理请求了。

    #静态代理
    location ~ .*/(css|js|img|images|image|font|fonts) {
      #root html/my_static_proxy
            #root   /opt/static;
      #root /usr/local/nginx/my_static_proxy;
      #改成静态资源代理
      proxy_pass  http://static_proxy;
    }


注意这里的static_proxy要和upstream后的一样!我又不小心写错了一次!血的教训!


最后访问jsp页面:

20200930234431384.png

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
1月前
|
缓存 负载均衡 安全
Nginx常用基本配置总结:从入门到实战的全方位指南
Nginx常用基本配置总结:从入门到实战的全方位指南
256 0
|
1月前
|
tengine 关系型数据库 MySQL
Tengine、Nginx安装MySQL数据库命令教程
本指南详细介绍了在Linux系统上安装与配置MySQL数据库的步骤。首先通过下载并安装MySQL社区版本,接着启动MySQL服务,使用`systemctl start mysqld.service`命令。若启动失败,可尝试使用`sudo /etc/init.d/mysqld start`。利用`systemctl status mysqld.service`检查MySQL的服务状态,确保其处于运行中。通过日志文件获取初始密码,使用该密码登录数据库,并按要求更改初始密码以增强安全性。随后创建一个名为`tengine`的数据库,最后验证数据库创建是否成功以及完成整个设置流程。
|
1月前
|
tengine 应用服务中间件 Linux
Tengine、Nginx安装PHP命令教程
要在阿里云Linux上安装PHP,请先更新YUM源并启用PHP 8.0仓库,然后安装PHP及相关扩展。通过`php -v`命令验证安装成功后,需修改Nginx配置文件以支持PHP,并重启服务。最后,创建`phpinfo.php`文件测试安装是否成功。对于CentOS系统,还需安装EPEL源和Remi仓库,其余步骤类似。完成上述操作后,可通过浏览器访问`http://IP地址/phpinfo.php`测试安装结果。
|
1月前
|
应用服务中间件 Linux nginx
Mac os 安装 nginx 教程(success)
这篇文章是关于如何在Mac OS系统上使用Homebrew安装nginx及其依赖,并解决安装过程中可能出现的权限问题。
102 0
Mac os 安装 nginx 教程(success)
|
1月前
|
负载均衡 算法 应用服务中间件
Nginx入门 -- 理解 Nginx 的请求处理流程
Nginx入门 -- 理解 Nginx 的请求处理流程
98 1
|
1月前
|
安全 应用服务中间件 网络安全
Nginx入门 -- 了解Nginx中证书配置
Nginx入门 -- 了解Nginx中证书配置
41 0
|
1月前
|
负载均衡 监控 算法
Nginx入门 -- 深入了解Nginx负载均衡
Nginx入门 -- 深入了解Nginx负载均衡
21 0
|
1月前
|
缓存 负载均衡 应用服务中间件
Nginx入门 -- Nginx 配置详解
Nginx入门 -- Nginx 配置详解
249 0
|
1月前
|
存储 缓存 应用服务中间件
Nginx入门 -- 基本数据结构中之ngx_hash_t
Nginx入门 -- 基本数据结构中之ngx_hash_t
36 0
|
1月前
|
存储 缓存 应用服务中间件
Nginx入门 -- 基本数据结构中之ngx_list_t,ngx_queue_t
Nginx入门 -- 基本数据结构中之ngx_list_t,ngx_queue_t
25 0