Nginx初步入门
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初步入门的更多相关文章
- Shel脚本-初步入门之《03》
Shel脚本-初步入门-Shell 脚本在 Linux 运维工作中的地位 3.Shell 脚本在 Linux 运维工作中的地位 Shell 脚本语言很适合用于处理纯文本类型的数据,而 Linux 系统 ...
- Nginx快速入门菜鸟笔记
Nginx快速入门-菜鸟笔记 1.编译安装nginx 编译安装nginx 必须先安装pcre库. (1)uname -a 确定环境 Linux localhost.localdomain 2.6. ...
- nginx配置入门
谢谢作者的分享精神,原文地址:http://www.nginx.cn/591.html nginx配置入门 之前的nginx配置是对nginx配置文件的具体含义进行讲解,不过对于nginx的新手可能一 ...
- nginx 配置入门
之前的nginx配置是对nginx配置文件的具体含义进行讲解,不过对于nginx的新手可能一头雾水. 今天看到个文档不错,翻译过来分享给大家,可以让新手更详细地了解nginx配置,可以说是nginx配 ...
- Struts 2 初步入门(三)
接Struts 2初步入门(二) 若想用多个通配符设定访问: <struts> <package name="default" namespace="/ ...
- Java反射-初步入门
Java反射-初步入门 学反射先了解什么是反射. 百度百科:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动 ...
- 轻量级HTTP服务器Nginx(入门与安装篇)
轻量级HTTP服务器Nginx(入门篇) 文章来源于南非蚂蚁 一.什么是Nginx 相信很多读者都对Apache非常熟悉,与Apache类似,Nginx是一款高性能的HTTP和反向代理服务器软 ...
- Shel脚本-初步入门之《06》
Shel脚本-初步入门-06 Shell 脚本的建立和执行 6.Shell 脚本的建立和执行 6.1 Shell脚本的建立 在 Linux 系统中,Shell 脚本(bash Shell 程序)通常是 ...
- Shel脚本-初步入门之《01》
Shel脚本-初步入门-什么是 Shell 1.什么是 Shell Shell 是一个命令解释器,它的作用是解释执行用户输入的命令及程序等.Shell 存在于操作系统的最外层,负责与用户直接对话,把用 ...
随机推荐
- java中String StringBuilder StringBuffer比较和效率(性能)测试
string stringbuilder stringbuffer三者的区别 从JDK源码看,String.StringBuilder.StringBuffer都是存放在char[] 数组字符串. 简 ...
- java传参问题
参考链接:https://www.cnblogs.com/linkstar/p/5951141.html public class Example { String testString = publ ...
- spark2.4.5计算框架中各模块的常用实例
本项目是使用scala语言给出了spark2.4.5计算框架中各模块的常用实例. 温馨提醒:spark的版本与scala的版本号有严格的对应关系,安装请注意. Spark Core RDD以及Pair ...
- java学习(第二篇)语法学习
1.java标识符 类名.变量名以及方法名都被称为标识符. 关于 Java 标识符,有以下几点需要注意: 所有的标识符都应该以字母(A-Z 或者 a-z),美元符($).或者下划线(_)开始 首字符之 ...
- (第三篇)SSH网络协议概述
ssh简介原理 windows远程登录,QQ远程协助修电脑 简单说,SSH是一种网络协议,用于计算机之间的加密登录.最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑.1995年,芬兰学者 ...
- 2019-2020-1 20199329《Linux内核原理与分析》第八周作业
<Linux内核原理与分析>第八周作业 一.本周内容概述: 理解编译链接的过程和ELF可执行文件格式 编程练习动态链接库的两种使用方式 使用gdb跟踪分析一个execve系统调用内核处理函 ...
- java并发中ExecutorService的使用
文章目录 创建ExecutorService 为ExecutorService分配Tasks 关闭ExecutorService Future ScheduledExecutorService Exe ...
- 【Linux常见命令】vimdiff命令
在类nuix平台,我们希望对文件之间的差异之间快速定位,希望能够很容易的进行文件合并……. 可以使用Vim提供的diff模式,通常称作vimdiff,就是这样一个能满足所有这些需求,甚至能够提供更多的 ...
- 13.Python中的命名空间是什么
Python中的命名空间是什么? In Python,every name introduced has a place where it lives and can be hooked for. T ...
- mac OS Apache Tomcat 启动/停止服务
进入Tomcat下的bin目录 启动Tomcat命令 ./startup.sh Tomcat 默认端口 8080 停止Tomcat服务命令 ./shutdown.sh 执行tomcat ./shutd ...