码迷,mamicode.com
首页 > 其他好文 > 详细

Nginx初步入门

时间:2020-05-19 23:03:18      阅读:88      评论:0      收藏:0      [点我收藏+]

标签:eset   save   创建   force   netscaler   params   代理   with   free   

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初步入门

标签:eset   save   创建   force   netscaler   params   代理   with   free   

原文地址:https://www.cnblogs.com/xiets/p/12919749.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!