Nginx 详细介绍和配置以及常用技巧

发布于 2023-11-12 19:26:27 字数 9188 浏览 22 评论 0

什么是 nginx

Nginx 是一款高性能的 http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师 Igor Sysoev 所开发,官方测试 nginx 能够支支撑 5 万并发链接,并且 cpu、内存等资源消耗却非常低,运行非常稳定。(C 语言开发)

应用场景

  • http 服务器。Nginx 是一个 http 服务可以独立提供 http 服务。可以做网页静态服务器。
  • 虚拟主机。可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。(实现 80 端口的共用)
  • 反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用 nginx 做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。

nginx 安装

下载 nginx,官方网站: http://nginx.org/ ,使用的版本是 1.8.0 版本。

Nginx 提供的源码。

要求的安装环境

需要安装 gcc 的环境。yum install gcc-c++(Nginx 提供的 C 语言源代码,因为处于跨平台的需要,没有给出编译好的可执行程序,需要我们在 Linux 上手动编译)

第三方的开发包。

PCRE

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

yum install -y pcre pcre-devel

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

zlib

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

yum install -y zlib zlib-devel

openssl

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

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

yum install -y openssl openssl-devel

安装步骤

第一步:把 nginx 的源码包上传到 linux 系统

第二步:解压缩

[root@localhost ~]# tar zxf nginx-1.8.0.tar.gz

第三步:使用 configure 命令创建一 makeFile 文件。

执行下列代码:

./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \ 
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi

注意:启动 nginx 之前,上边将临时文件目录指定为/var/temp/nginx,需要在 /var 下创建 temp 及 nginx 目录

[root@localhost sbin]# mkdir /var/temp/nginx/client -p

第四步:make

第五步:make install

启动 nginx

进入 sbin 目录

[root@localhost sbin]# ./nginx

关闭 nginx:

[root@localhost sbin]# ./nginx -s stop

推荐使用:

[root@localhost sbin]# ./nginx -s quit

重启 nginx:

  • 先关闭后启动。
  • 刷新配置文件:
[root@localhost sbin]# ./nginx -s reload

访问 nginx

默认是 80 端口。注意:是否关闭防火墙。

配置虚拟主机

就是在一台服务器启动多个网站。

如何区分不同的网站:

  • 域名不同
  • 端口不同

通过端口区分不同虚拟机

Nginx 的配置文件:/usr/local/nginx/conf/nginx.conf

#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 {
  worker_connections  1024;
}
http {
  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  logs/access.log  main;
  sendfile    on;
  #tcp_nopush   on;
  #keepalive_timeout  0;
  keepalive_timeout  65;
  #gzip  on;
  server {
    listen     80;
    server_name  localhost;
    #charset koi8-r;
    #access_log  logs/host.access.log  main;
    location / {
      root   html;
      index  index.html index.htm;
    }
  }
}

可以配置多个 server,配置了多个虚拟主机。

添加虚拟主机:

#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 {
  worker_connections  1024;
}
http {
  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  logs/access.log  main;
  sendfile    on;
  #tcp_nopush   on;
  #keepalive_timeout  0;
  keepalive_timeout  65;
  #gzip  on;
  server {
    listen     80;
    server_name  localhost;
    #charset koi8-r;
    #access_log  logs/host.access.log  main;
    location / {
      root   html;
      index  index.html index.htm;
    }
  }
  server {
    listen     81;
    server_name  localhost;
    #charset koi8-r;
    #access_log  logs/host.access.log  main;
    location / {
      root   html-81;
      index  index.html index.htm;
    }
  }
}

重新加载配置文件

[root@localhost nginx]# sbin/nginx -s reload

通过域名区分虚拟主机

一个域名对应一个 ip 地址,一个 ip 地址可以被多个域名绑定。当一个 ip 被多个域名绑定时,服务器如何区分我应该访问哪个目录呢?

本地测试可以修改 hosts 文件。

修改 window 的 hosts 文件:(C:\Windows\System32\drivers\etc)

可以配置域名和 ip 的映射关系,如果 hosts 文件中配置了域名和 ip 的对应关系,不需要走 dns 服务器。

Nginx 的配置

#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 {
  worker_connections  1024;
}
http {
  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  logs/access.log  main;
  sendfile    on;
  #tcp_nopush   on;
  #keepalive_timeout  0;
  keepalive_timeout  65;
  #gzip  on;
  server {
    listen     80;
    server_name  localhost;
    #charset koi8-r;
    #access_log  logs/host.access.log  main;
    location / {
      root   html;
      index  index.html index.htm;
    }
  }
  server {
    listen     81;
    server_name  localhost;
    #charset koi8-r;
    #access_log  logs/host.access.log  main;
    location / {
      root   html-81;
      index  index.html index.htm;
    }
  }
  server {
    listen     80;
    server_name    www.taobao.com  ;
    #charset koi8-r;
    #access_log  logs/host.access.log  main;
    location / {
      root   html-taobao;
      index  index.html index.htm;
    }
  }
  server {
    listen     80;
    server_name    www.baidu.com  ;
    #charset koi8-r;
    #access_log  logs/host.access.log  main;
    location / {
      root   html-baidu;
      index  index.html index.htm;
    }
  }
}

域名的配置:

192.168.25.148  www.taobao.com 
192.168.25.148 www.baidu.com

反向代理

什么是反向代理

正向代理

反向代理:

反向代理服务器决定哪台服务器提供服务。返回代理服务器不提供服务器。也是请求的转发。

Nginx 实现反向代理

两个域名指向同一台 nginx 服务器,用户访问不同的域名显示不同的网页内容。

两个域名是 www.sian.com.cn 和 www.sohu.com

nginx 服务器使用虚拟机 192.168.101.3

第一步:安装两个 tomcat,分别运行在 8080 和 8081 端口。

第二步:启动两个 tomcat。

第三步:反向代理服务器的配置

upstream tomcat1 {
server 192.168.25.148:8080;
}
server {
  listen     80;
  server_name    www.sina.com.cn  ;
  #charset koi8-r;
  #access_log  logs/host.access.log  main;
  location / {
    proxy_pass     http://tomcat1  ;
    index  index.html index.htm;
  }
}
upstream tomcat2 {
server 192.168.25.148:8081;
}
server {
  listen     80;
  server_name    www.sohu.com  ;
  #charset koi8-r;
  #access_log  logs/host.access.log  main;
  location / {
    proxy_pass     http://tomcat2  ;
    index  index.html index.htm;
  }
}

第四步:nginx 重新加载配置文件

第五步:配置域名

在 hosts 文件中添加域名和 ip 的映射关系

192.168.25.148  www.sina.com.cn 
192.168.25.148 www.sohu.com

负载均衡

如果一个服务由多条服务器提供,需要把负载分配到不同的服务器处理,需要负载均衡。

upstream tomcat2 {
  server 192.168.25.148:8081;
  server 192.168.25.148:8082;
}

可以根据服务器的实际情况调整服务器权重。权重越高分配的请求越多,权重越低,请求越少。默认是都是 1

upstream tomcat2 {
  server 192.168.25.148:8081;
  server 192.168.25.148:8082 weight=2;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

留蓝

暂无简介

0 文章
0 评论
21 人气
更多

推荐作者

内心激荡

文章 0 评论 0

JSmiles

文章 0 评论 0

左秋

文章 0 评论 0

迪街小绵羊

文章 0 评论 0

瞳孔里扚悲伤

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文