前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx的入门

Nginx的入门

作者头像
HUC思梦
发布2020-09-03 17:08:34
2.1K0
发布2020-09-03 17:08:34
举报
文章被收录于专栏:HUC思梦的java专栏

Nginx 入门

一、正向代理和反向代理

1、正向代理

正向代理(forward proxy) ,一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并制定目标(原始服务器),然后代理向原始服务器转发请求并将获得的内容返回给客户端,客户端才能使用正向代理。我们平时说的代理就是指正向代理。

简单一点:A向C借钱,由于一些情况不能直接向C借钱,于是A想了一个办法,他让B去向C借钱,这样B就代替A向C借钱,A就得到了C的钱,C并不知道A的存在,B就充当了A的代理人的角色。

2、反向代理

反向代理(Reverse Proxy),以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求的客户端,此时代理服务器对外表现为一个反向代理服务器。

理解起来有些抽象,可以这么说:A向B借钱,B没有拿自己的钱,而是悄悄地向C借钱,拿到钱之后再交给A,A以为是B的钱,他并不知道C的存在。

3、正向代理和反向代理的区别

  • 位置不同 正向代理,架设在客户机和目标主机之间; 反向代理,架设在服务器端;
  • 代理对象不同 正向代理,代理客户端,服务端不知道实际发起请求的客户端; 反向代理,代理服务端,客户端不知道实际提供服务的服务端;

二、常用Web服务介绍

1、IIS

IIS(Internet信息服务)英文InternetInformationServer的缩写。它是微软公司主推的服务器。IIS的特点具有:安全性,强大,灵活。

2、Tomcat(Servlet容器)

Tomcat是Apache软件基金会(ApacheSoftwareFoundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。Tomcat技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web应用服务器(下降趋势)

3、Nginx(上升很快)

Nginx不仅是一个小巧且高效的HTTP服务器,也可以做一个高效的负载均衡反向代理,通过它接受用户的请求并分发到多个Mongrel进程可以极大提高Rails应用的并发能力。

4、Apache(下降趋势)

Apache是世界使用排名第一的Web服务器软件。它几乎可以运行在所有的计算机平台上。由于Apache是开源免费的,因此有很多人参与到新功能的开发设计,不断对其进行完善。Apache的特点是简单、速度快、性能稳定,并可做代理服务器来使用。

5、静态资源和动态资源及区别

静态资源:一般客户端发送请求到web服务器,web服务器从内存在取到相应的文件,返回给客户端,客户端解析并渲染显示出来。

动态资源:一般客户端请求的动态资源,先将请求交于web容器,web容器连接数据库,数据库处理数据之后,将内容交给web服务器,web服务器返回给客户端解析渲染处理。

2.静态资源和动态资源的区别

a.静态资源一般都是设计好的html页面,而动态资源依靠设计好的程序来实现按照需求的动态响应;

b.静态资源的交互性差,动态资源可以根据需求自由实现;

c.在服务器的运行状态不同,静态资源不需要与数据库参于程序处理,动态可能需要多个数据库的参与运算。

画图说明: (课堂讲解)

静态资源服务器运行状态:

动态资源服务器:

1、没有请求后端数据库

2、请求了后端数据库

三、Nginx的安装

1、下载Nginx

wget http://nginx.org/download/nginx-1.14.2.tar.gz (stable)

2、安装Nginx依赖

nginx是C语言开发,建议在linux上运行,本教程使用Centos7.4为安装环境。

n gcc

安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc:yum install gcc-c++

n PCRE

PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。

yum install -y pcre pcre-devel

注:pcre-devel是使用pcre开发的一个二次开发库。nginx也需要此库。

n zlib

zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。

yum install -y zlib zlib-devel

n openssl

OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。

nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。

yum install -y openssl openssl-devel

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

3、安装Nginx

解压

tar xf nginx-1.12.2.tar.gz

进行configure配置

./configure --prefix=/usr/local/nginx (可以配置很多nginx其他模块,后面配置https的时候讲解)

编译和安装

make & make install -j 4

如果以上操作没有报错则安装成功

启动nginx

./nginx -c 指定配置文件位置

eg: ./nginx -c /usr/local/conf/nginx.conf

./nginx 默认使用NGINX_HOME/config/nginx.conf配置文件

停止niginx

./nginx -s stop 停止

./nginx -s quit 退出

./nginx -s reload 重新加载nginx.conf (很常用)

发送信号量 (找不到nginx安装位置,但是想要停止nginx服务器情况下使用)

kill -TERM master进程号

kill -QUIT master进程号

nginx 常用命令

./nginx -v 查看nginx版本

./nginx -V 查看nginx的编译版本及配置的参数

./nginx -t 主要验证nginx.conf配置文件是否有问题

./nginx -c 根据配置文件的位置启动nginx

./nginx -s 发送对应信号处理master进程

-s signal : send signal to a master process: stop, quit, reopen, reload

四、Nginx的配置文件初识别

Nginx 服务的基本配置项详解:

我的本机nginx配置文件路径是 /usr/local/nginx/conf/ 这个目录下面,其中nginx.conf是主配置文件。Nginx.conf配置文件主要分成四个部分:

  • main (全局设置) 。
  • sever (虚拟主机设置)。
  • upstream负载均街服务器设置。
  • location(URL匹配特定位置的设置)。

说明:

main部分设置的命令将影响其他所有设置。 server 部分的命令主要用于指定主机和端口;。upstream命令主要用于负载均衡,设置一系列的后端服务器。 location 部分用于匹配网页位置。这四者之间的关系式server继承main, location 继承server, upstream 既不会继承其他设置也不会被继承。

在这四个部分当中,每个部分都包含若干命令,这些命令主要包含Nginx的主模块命令,事件模块命令,HTTP核心模块命令,同时每个部分还可以使用其他HTTP模块命令(例如HTTP SSL模块,HttpGzip Static模块和Http Addition模块等)。

代码语言:javascript
复制
#user  nobody;                                   
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 {
    use epoll;
    worker_connections  1024;
}

/*
  以上这块配置代码是对nginx全局属性的配置。
  user :主模块命令, 指定Nginx的worker进程运行用户以及用户组,默认由nobody账号运行(默认nginx)。
  worker processes: 指定Nginx要开启的进程数。
  error log:用来定义全局错设日志文件的路径和日志名称。日志输出级别有debug,info,notice,warn,error,crit 可供选择,其中debug输出日志最为详细,面crit输出日志最少。
  pid: 用来指定进程id的存储文件位置。
  event:设定nginx的工作模式及连接数上限,其中参数use用来指定nginx的工作模式(这里是epoll,epoll是多路复用IO(I/O Multiplexing)中的一种方式),nginx支持的工作模式有select ,poll,kqueue,epoll,rtsig,/dev/poll。其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,对于linux系统,epoll是首选。
         worker_connection是设置nginx每个进程最大的连接数,默认是1024,所以nginx最大的连接数max_client=worker_processes * worker_connections。进程最大连接数受到系统最大打开文件数的限制,需要设置ulimit。
*/


#下面部分是nginx对http服务器相关属性的设置
http {
    include       mime.types;               主模块命令,对配置文件所包含文件的设定,减少主配置文件的复杂度,相当于把部分设置放在别的地方,然后在包含进来,保持主配置文件的简洁
    default_type  application/octet-stream; 默认文件类型,当文件类型未定义时候就使用这类设置的。 

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '   指定nginx日志的格式
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;   开启高效文件传输模式(zero copy 方式),避免内核缓冲区数据和用户缓冲区数据之间的拷贝。
    #tcp_nopush     on;

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

    #gzip  on;             设置是否开启gzip模块

    #server段是虚拟主机的配置 这里可以写在别的文件中 然后在包含进来,比如写在/usr/local/nginx/vhost/xxx.conf 目录某文件中 然后在包含进来,可以包含多个文件 include /usr/local/nginx/vhost/*;
    server {
        listen       80;   虚拟主机的服务端口
        server_name  localhost;   用来指定ip或者域名,多个域名用逗号分开

        #charset utf-8;

        #access_log  logs/host.access.log  main;

        location / {                       地址匹配设置,支持正则匹配,也支持条件匹配,这里是默认请求地址,用户可以location命令对nginx进行动态和静态网页过滤处理
            root   html;                   虚拟主机的网页根目录
            index  index.html index.htm;   默认访问首页文件
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        location ~ \.php$ {   将以php为后缀的文件转发到 FastCGI处理. 使用FastCGI默认配置。本地8088端口处理
              fastcgi_pass   http://127.0.0.1:8088;

              fastcgi_index index.php;
              fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
              include        fastcgi_params;
        }
        #静态文件,nginx自己处理
        location ~ ^/(images|javascript|js|css|flash|media|static)/ {
             root /var/www/public/images;       
             expires 30d;  #缓存时间30天,静态文件更新不多,过期时间可以设大一点。
        }
       #配置Nginx状态的地址
        location /NginxStatus {
          stub_status            on;
          access_log              on;
          auth_basic              "NginxStatus";
          auth_basic_user_file  conf/htpasswd;
        }

       #配置nginx负载均衡的服务器列表
       upstream mysvr {
          #weigth参数表示权值,权值越高被分配到的几率越大
          #本机上的Squid开启3128端口
          server 192.168.199.1:88 weight=5;
          server 192.168.199.1:80   weight=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;
    #    }
    #}

}

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-06-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Nginx 入门
    • 一、正向代理和反向代理
      • 1、正向代理
      • 2、反向代理
      • 3、正向代理和反向代理的区别
    • 二、常用Web服务介绍
      • 1、IIS
      • 2、Tomcat(Servlet容器)
      • 3、Nginx(上升很快)
      • 4、Apache(下降趋势)
      • 5、静态资源和动态资源及区别
    • 三、Nginx的安装
      • 1、下载Nginx
      • 2、安装Nginx依赖
      • 3、安装Nginx
    • 四、Nginx的配置文件初识别
      • Nginx 服务的基本配置项详解:
相关产品与服务
SSL 证书
腾讯云 SSL 证书(SSL Certificates)为您提供 SSL 证书的申请、管理、部署等服务,为您提供一站式 HTTPS 解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档