1.Nginx介绍

官网:nginx.org

Nginx (“engine x”) 是一个开源的、支持高性能、高并发的WWW服务和代理服务软件。
它是由俄罗斯人IgorSysoev开发的,最初被应用在俄罗斯的大型网站www.rambler.ru上。

2.Nginx3大主要功能

1)网页服务:自身是静态Web服务,
还支持动态Web服务
PHP(fastcgi_pass)
JAVA(proxy_pass)
Python(uwsgi_pass)
==================================
memcache(memcache_pass)
...... 2)负载均衡\反向代理
haproxy,lvs,F5,netscaler 只支持http,现在tcp/udp。 3)缓存服务器
squid,varnish

3.特点

最大特点:静态小文件高并发,占用资源少。软件本身小。

企业面试时需要解答如下Nginx HTTP服务器的特色及优点:

1)支持高并发:能支持几万并发连接(特别是静态小文件业务环境)。
2)资源消耗少:在3万并发连接下,开启10个Nginx线程消耗不到200MB内存。
3)可以做HTTP反向代理及加速缓存,即负载均衡功能,内置对RS节点服务
器健康检查功能,这相当于专业的haproxy软件或lvs的功能。
具备squid等专业缓存软件等的缓存功能。

4.Nginx主要应用场景:

1)静态Web服务器:
使用Nginx运行HTML、JS、CSS、小图片等静态数据(此功能类似lighttpd软件)。 2)配合运行动态Web服务器:
Nginx结合FastCGI运行PHP等动态程序(例如使用fastcgi_pass方式)。
Nginx结合proxy_pass支持Java动态程序(tomcat/resin服务)。Nginx结合uwsgi_pass支持Python。 3)反向代理/负载均衡
http负载均衡 4)做Web缓存服务器(把文件放入内存里)。

5.反向代理与负载均衡

(1)正向代理:由内向外。 代替 效率低
代替局域网内PC,请求外部应用服务。 (2)反向代理:由外向内 代替 效率低
代替外部的用户请求内部的应用服务器,也有负载均衡的功能,但不能混为一谈。 (3)负载均衡:转发、效率高
甩手掌柜。

6.为什么Nginx总体性能比Apache高?

(1)Nginx使用最新的epoll(Linux2.6内核)和kqueue(freebsd)异步网络I/O模型,而Apache则使用的是传统的select模型。目前Linux下能够承受高并发访问的Squid、Memcached软件都采用的是epoll模型。

(2)Apache则使用的是传统的select模型,Nginx使用高并发的epoll模型

(3)select模型:伙伴去宿舍找你,一个宿舍一个宿舍找。。效率低。
(4)epoll模型: 伙伴去宿舍找你,先问宿管大妈,看看在哪间宿舍,然后直奔具体宿舍。效率高。

7.软件安装方式

(1)rpm安装
优点:安装简单,速度快。
缺点:依赖多,解决依赖困难繁琐。 (2)yum安装
优点:简单快,自动解决依赖。
缺点:不能选择软件版本或软件存放路径。 (3)编译安装(源码编译)
缺点:安装速度慢,复杂,需要GCC编译器。
优点:可以自定义安装(版本、软件路径) (4)将源码制作成rpm,然后放到yum仓库,实现yum自动安装。
缺点:一次性慢,复杂
优点:安装快,可以自定义安装(版本、软件路径) (5)二进制安装
制作RPM YUM仓库搭建
https://blog.oldboyedu.com/autodeploy-rpm/

8. 安装Nginx

此处介绍两种安装方式

(1)YUM安装
yum安装又分为两种安装方式
1)epel源安装,安装版本低。
2)nginx官方源安装,版本高 (2)编译安装

8.1 YUM安装

(1)配置nginx官网源

1)配置nginx.repo文件
[root@web01 ~]# vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1 2)yum安装nginx,并启动
[root@web01 ~]# yum -y install nginx 3)检查是否安装成功
[root@web01 ~]# rpm -qa nginx
nginx-1.18.0-1.el7.ngx.x86_64 4)启动nginx服务
[root@web01 ~]# systemctl start nginx
[root@web01 ~]# systemctl enable nginx 5)检查端口
[root@web01 ~]# netstat -lntup|grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 6825/nginx: master

6)浏览器访问测试

8.2 编译安装

(1)下载nginx的rpm包



[root@web01 ~]# mkdir -p /server/tools
[root@web01 ~]# cd /server/tools
[root@web01 /server/tools]# wget http://nginx.org/download/nginx-1.18.0.tar.gz
[root@web01 /server/tools]# ll -h
total 1016K
-rw-r--r-- 1 root root 1016K Apr 21 22:33 nginx-1.18.0.tar.gz

(2)安装依赖

1)安装Nginx所需的PCRE库
安装pcre库是为了使nginx支持具备URL重写功能的Rewrite模块(伪静态)。 [root@web01 /server/tools]# yum -y install pcre pcre-devel 2)安装openssl-devel
Nginx在使用https功能时要用到此模块,如果不装,安装nginx过程中,也会报错。 [root@web01 /server/tools]# yum -y install openssl openssl-devel

(3)编译安装步骤

[root@web01 /server/tools]# tar xf nginx-1.18.0.tar.gz
[root@web01 /server/tools]# cd nginx-1.18.0
[root@web01 /server/tools]# useradd -s /sbin/nologin www -M #创建nginx进程使用的用户(也就是nginx启动的时候,内部是由该用户启动的)
[root@web01 /server/tools]# id www
[root@web01 /server/tools]# rpm -qa gcc* #需要安装gcc编译器,,没装的一定要装
gcc-c++-4.8.5-36.el7.x86_64
gcc-gfortran-4.8.5-36.el7.x86_64
gcc-4.8.5-36.el7.x86_64
[root@web01 /server/tools]# ./configure --user=www --group=www --prefix=/application/nginx-1.18.0/ --with-http_stub_status_module --with-http_ssl_module --with-pcre #配置
#configure参数的作用
--prefix=PATH 路径
--user=USER 用户
--group=GROUP 组
--with-pcre 伪静态
--with-http_stub_status_module 状态
--with-http_ssl_module 加密 443 [root@web01 /server/tools]# make #编译,把源码编译成二进制
[root@web01 /server/tools]# make install #编译安装
[root@web01 /server/tools]# ln -s /application/nginx-1.18.0/ /application/nginx #生成软连接
[root@web01 /server/tools]# /application/nginx/sbin/nginx #启动
[root@web01 /server/tools]# netstat -lntup|grep nginx #查看启动情况
[root@web01 /server/tools]# curl -i localhost #查看返回状态码是否为200

9. Nginx目录结构说明

[root@web02 /application/nginx]# tree
.
├── conf
│   ├── fastcgi.conf #和动态服务的接口配置参数,配合php
│   ├── fastcgi.conf.default
│   ├── fastcgi_params
│   ├── fastcgi_params.default
│   ├── koi-utf
│   ├── koi-win
│   ├── mime.types #媒体类型
│   ├── mime.types.default
│   ├── nginx.conf #主配置文件
│   ├── nginx.conf.default
│   ├── scgi_params
│   ├── scgi_params.default #和动态服务的接口配置参数
│   ├── uwsgi_params
│   ├── uwsgi_params.default #和动态服务的接口配置参数,配合Python
│   └── win-utf
├── fastcgi_temp
├── html #默认站点目录。
│   ├── 50x.html
│   └── index.html #默认的首页,10.0.0.8不指定文件,默认加载index.html首页。
├── logs
│   ├── access.log #访问日志
│   ├── error.log #Nginx错误日志。
│   └── nginx.pid #进程号对应文件。
├── sbin
│   └── nginx #启动命令。

10. Nginx启动疑难杂症汇总

10.1 启动Nginx报错:nginx: [emerg] getpwnam("nginx") failed。

这是因为没有对应的Nginx服务用户导致的,创建一个用户即可。

10.2 如何查看Nginx编译时的参数?

[root@web01 /server/tools/nginx-1.18.0]# /application/nginx/sbin/nginx -V
nginx version: nginx/1.18.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --user=www --group=www --prefix=/application/nginx-1.18.0/ --with-http_stub_status_module --with-http_ssl_module --with-pcre

10.3 浏览器、wget或者curl等软件访问不了Nginx页面。

此类问题的排查思路分为nginx服务端和客户端排查,服务端排查过程如下:

(1)首先关闭selinux
[root@web01 ~]# setenforce 0
[root@web01 ~]# vim /etc/selinux/config #把SELINUX=enforcing改成SELINUX=disabled
[root@web01 ~]# grep SELINUX=disabled /etc/selinux/config (2)然后检查防火墙,如下:
[root@web01 ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead) #表示没有开启
Docs: man:firewalld(1) (3)检查端口和进程
[root@web01 ~]# netstat -lntup|grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 9458/nginx: master
[root@web01 ~]# ps -ef | grep [n]ginx
root 9458 1 0 20:37 ? 00:00:00 nginx: master process /application/nginx/sbin/nginx
www 9459 9458 0 20:37 ? 00:00:00 nginx: worker process (4)在服务器本地wget http://192.168.1.51测试(如果前两步灭有通过,这步就不用进行了)
[root@web01 ~]# wget http://192.168.1.51
--2020-05-19 21:04:13-- http://192.168.1.51/
Connecting to 192.168.1.51:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 612 [text/html]
Saving to: ‘index.html.1’ 100%[==================================================================================================================================================>] 612 --.-K/s in 0s 2020-05-19 21:04:13 (70.4 MB/s) - ‘index.html.1’ saved [612/612] (5)查看nginx错误日志
[root@web01 ~]# cat /application/nginx/logs/error.log

客户端排查过程

(1)在客户端上telnet服务器端IP、端口
C:\Users\Administrator>ping 192.168.1.51
正在 Ping 192.168.1.51 具有 32 字节的数据:
来自 192.168.1.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.1.51 的回复: 字节=32 时间<1ms TTL=64 #通了,就可以排除物理链路问题 (2)在客户端telnet服务端I、端口等
[root@web01 ~]# telnet 192.168.1.51 80
Trying 192.168.1.51...
Connected to 192.168.1.51.
Escape character is '^]'. #这就表示端口开放了 (3)在客户端使用wget或curl命令检测
[root@web01 ~]# curl -I 192.168.1.51
HTTP/1.1 200 OK
Server: nginx/1.18.0
Date: Tue, 19 May 2020 13:16:16 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 19 May 2020 12:36:58 GMT
Connection: keep-alive
ETag: "5ec3d2ea-264"
Accept-Ranges: bytes

10.4 部署一个web站点

[root@web01 /application/nginx/html]# cat index.html
<html>
<head>
<title>老男孩58期</title>
<meta charset="UTF-8">
</head>
<body bgcolor=green>
<br>
<div align=center>
<table border=1>
<tr>
<td>ID</td>
<td>NAME</td>
</tr> <tr>
<td>001</td>
<td>项博</td>
</tr>
<tr>
<td>002</td>
<td>项伯</td>
</tr>
</table>
</div>
</body>
</html>

浏览器访问

Nginx初步入门的更多相关文章

  1. Shel脚本-初步入门之《03》

    Shel脚本-初步入门-Shell 脚本在 Linux 运维工作中的地位 3.Shell 脚本在 Linux 运维工作中的地位 Shell 脚本语言很适合用于处理纯文本类型的数据,而 Linux 系统 ...

  2. Nginx快速入门菜鸟笔记

    Nginx快速入门-菜鸟笔记   1.编译安装nginx 编译安装nginx 必须先安装pcre库. (1)uname -a 确定环境 Linux localhost.localdomain 2.6. ...

  3. nginx配置入门

    谢谢作者的分享精神,原文地址:http://www.nginx.cn/591.html nginx配置入门 之前的nginx配置是对nginx配置文件的具体含义进行讲解,不过对于nginx的新手可能一 ...

  4. nginx 配置入门

    之前的nginx配置是对nginx配置文件的具体含义进行讲解,不过对于nginx的新手可能一头雾水. 今天看到个文档不错,翻译过来分享给大家,可以让新手更详细地了解nginx配置,可以说是nginx配 ...

  5. Struts 2 初步入门(三)

    接Struts 2初步入门(二) 若想用多个通配符设定访问: <struts> <package name="default" namespace="/ ...

  6. Java反射-初步入门

    Java反射-初步入门 学反射先了解什么是反射. 百度百科:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动 ...

  7. 轻量级HTTP服务器Nginx(入门与安装篇)

    轻量级HTTP服务器Nginx(入门篇)   文章来源于南非蚂蚁   一.什么是Nginx 相信很多读者都对Apache非常熟悉,与Apache类似,Nginx是一款高性能的HTTP和反向代理服务器软 ...

  8. Shel脚本-初步入门之《06》

    Shel脚本-初步入门-06 Shell 脚本的建立和执行 6.Shell 脚本的建立和执行 6.1 Shell脚本的建立 在 Linux 系统中,Shell 脚本(bash Shell 程序)通常是 ...

  9. Shel脚本-初步入门之《01》

    Shel脚本-初步入门-什么是 Shell 1.什么是 Shell Shell 是一个命令解释器,它的作用是解释执行用户输入的命令及程序等.Shell 存在于操作系统的最外层,负责与用户直接对话,把用 ...

随机推荐

  1. Websec level 30

    前言 昨天在易霖博搞的网络安全与执法竞赛看到的一道web题,实际上就是用两个原题凑起来的.. 不过后面的一关没见过这里简单记录一下 第一关 打开是个登录界面,和BJDCTF的简单注入一模一样,连密码都 ...

  2. git在push时候出现timeout的解决方法

    1.先对照一下公钥是否正确:linux下生成的.ssh在~/.ssh,命令行直接cd ~/.ssh即可:2.本次出现的问题如下: 出现了连接不上的情况,传输协议用的是ssh,此时需要进行如下操作: 进 ...

  3. linux抓包的实现

    工具: wireshark tcpdump 在这里仅仅介绍后者: 在网络问题的调试中,tcpdump应该说是一个必不可少的工具,和大部分linux下优秀工具一样,它的特点就是简单而强大. 默认情况下, ...

  4. Qt 正则表达式检查 IP 格式

    KillerSmath 2018年6月29日 下午10:41 @Pranit-Patil Hi there. Like @jonB says above, you should to replace\ ...

  5. Comparable 接口与Comparator的使用的对比

    package com.yhqtv.java; import org.junit.Test; import java.util.Arrays; import java.util.Comparator; ...

  6. vuex-persist数据持久化存储插件

    Vuex 解决了多视图之间的数据共享问题.但是运用过程中又带来了一个新的问题是,Vuex 的状态存储并不能持久化.也就是说当你存储在 Vuex 中的 store 里的数据,只要一刷新页面,数据就丢失了 ...

  7. PAT A1023

    简单的大数问题,long long并不能容纳21位数字,这是刚开始没有注意到的 #include<iostream> #include<stdlib.h> #include&l ...

  8. 外媒解读Web安全核心PKI的四大致命问题

    Web安全的立足根基在于复杂的PKI部署体系,但实际生活中得到正确部署的比例却非常有限,而且这一切都将随着摩尔定律的滚滚洪流灰飞烟灭. 我个人算是PKI(即公共密钥基础设施)的忠实拥护者.我热爱数学与 ...

  9. 小老板,我学的计算机组成原理告诉我半导体存储器都是断电后丢失的,为什么U盘SSD(固态硬盘)没事呢?

    什么是闪存: 快闪存储器(英语:flash memory),是一种电子式可清除程序化只读存储器的形式,允许在操作中被多次擦或写的存储器 存储原理 要讲解闪存的存储原理,还是要从EPROM和EEPROM ...

  10. RF(数据库测试)

    1.下载 DatabaseLibrary 库 pip install robotframework-databaselibrary 2.下载 pymysql 库(作为中间件) pip install ...