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 存在于操作系统的最外层,负责与用户直接对话,把用 ...
随机推荐
- javascript-如何获取标签的内容
<input>标签的: document.getElementById("id").value ; 其他文本标签的: document.getElementById(& ...
- MySql -- 数据结构
现在的数据表不单单只是存储数据,还有的是设计功能和快速处理数据的结构功能: 首先,我们在设计数据库的时候,我们要先分清楚,那些是要单纯的存储数据的(固定),然后再设计出来数据的表(流动) 你懂我意思吧 ...
- Mac home 目录下创建文件夹
example:sudo vim /etc/auto_master before: # Automounter master map +auto_master # Use directory serv ...
- Python与Excel交互——Xlwings实战
这一期直接来实战. 比如说,我们在一个快递网站上爬取了几个快递的轨迹信息,我们需要将数据保存下来,一个常规做法是把数据保存在数据库里(Mysql,MongoDB,Redis),另一个是用Excel的形 ...
- Redis数据迁移的三个方法
为什么80%的码农都做不了架构师?>>> 1. rdb数据备份恢复方法 redis 127.0.0.1:6379> SAVE OK 或者 redis-cli -h 127. ...
- Vue 结合 echarts 原生 html5 实现拖拽排版报表系统
前言 不知道各位 coder 有没有碰到过许多重复的业务需求,比如排版相类似的报表,只不过是顺序稍微换了一下,就是一个新的页面,虽然基于模板思想来写的话也能减少不少代码,但是相对的不那么方便,笔者最近 ...
- Codeforces Round #623 (Div. 2, based on VK Cup 2019-2020 - Elimination Round, Engine) A Dead Pixel
讨论坏点的左右上下的矩形大小. #include <bits/stdc++.h> using namespace std; int main() { int t; cin >> ...
- 2019年 ICPC亚洲区预赛(上海赛区)总结
首先,我要说,我输了,输给了自己的无知,输给了自己的心态与实力. 上海区域赛,打铁而归,最终还是没有比过自己SLG的朋友.要说什么呢?实力的差距,还是说给自己的失败找借口?不能进入金牌区,为什么铜牌区 ...
- 题解 AT3849 【[ABC084C] Special Trains】
本文为UserUnknown原创 题目大意 总共有 \(N\) 个车站,每两个相邻的车站有单向的车. 从第 \(i\) 个站到第 \(i+1\) 个站 需要时间 \(C_i\) 分钟,且第一趟车在 \ ...
- Java——抽象类与接口的前世今生
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 1.抽象类: 当编写 ...