rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-6.noarch.rpm

# 安装阿里的epel源

国内使用web站点最多的www服务是Nginx

官方网址:nginx.org

什么是Nginx

开源、支持高性能、高并发的www服务软件,一种http协议的实现

优点:

高并发(静态资源)

占用资源少

功能丰富(反向代理、负载均衡)

高效稳定

Nginx有哪些应用?

  1. 经典组合 LAMP(linux apache mysql php)
  2. 现在组合: LNMP(linux nginx mysql php)
  3. web服务软件,具有反向代理功能,稳定高效运行
  4. 可以运行在任何已知的平台

Nginx总体为何比apache性能高?

  1. Nginx采用epoll IO模型,而apache采用传统select IO模型

  2. 对于要求高并发的站点,采用epoll更加高效

Nginx有哪些常见的模块?

  1. Nginx核心模块

    负责Nginx全局应用,对应配置文件的Main区块和Events区块,包含nginx必须的全局参数配置

  2. 标准的http功能模块集合

    默认自动安装到Nginx中,不建议改动默认,软件默认配置一般都是最优

如何编译安装Nginx

安装前首先明白这几个问题,选择什么版本?选择安装目录是什么?下载包放哪?安装Nginx软件相关依赖

    这里按照http://www.cnblogs.com/2bjiujiu/p/8067201.html 策略选择版本,并且web集群中其他节点都统一使用该版本,选择其中任何一版稳定版

    任何通过编译安装,安装目录统一规定放到 /application 目录下

    统一规定,从网站上下载的包放到当前用户家目录下 tools目录下

  2. 安装Nginx软件相关依赖

    安装依赖软件:pcre pcre-devel openssl openssl-devel

yum install -y pcre pcre-devel openssl openssl-devel

# pcre库,开发正则,为了支持Nginx的URL重写rewrite模块

# openssl库,安全加密相关的库

  3. 下载并解压

mkdir ~/tools                        # 创建统一存放下载包的目录

cd ~/tools                             # 切到这个目录下

wget -q http://nginx.org/download/nginx-1.12.2.tar.gz           # 下载源码包

tar -xf nginx-1.12.2.tar.gz     # 解压

cd nginx-1.12.2                    # 进入源码包

  4. 隐藏Nginx软件包信息

    1. 更改nginx软件名

vim src/core/nginx.h                          # 修改全局的参数

         13        #define NGINX_VERSION      "1.12.2"             # 更改版本号
# 更改为 apache最新版本号,迷惑性 14 #define NGINX_VER "nginx/" NGINX_VERSION
# 更改掉 nginx,更改为www 22 #define NGINX_VAR "NGINX"
# 更改NGINX,这个是软件名,更改为WWW
vim src/http/ngx_http_header_file_module.c

         49  static u_char ngx_http_server_string[] = "Server: nginx" CRLF;

         # 把49行 "Server: nginx"改为  "Server: www"

# 注意其中空格和格式

    2. 更改错误提示

vim src/http/ngx_http_special_response.c

         36行 "<hr><center>nginx</center>" CRLF

         # 把<center>nginx</center> 改为 <center>www</center>

         # 这里还可以添加标签"<hr><center>www(www.baidu.com) </center>"

    3. 添加软件运行用户,编译和安装

useradd web_nginx -s /sbin/nologin -M    # 添加web_nginx运行的用户

id web_nginx                                           # 检查

./configure --user=web_nginx --group=web_nginx --with-http_ssl_module --with-http_stub_status_module --prefix=/application/nginx-1.12.2/   

# --user= 和 --group= 指定用什么身份运行

# --with-http_ssl_module 为HTTPS提供了必要的支持,需要OpenSSL库

# --with-http_stub_status_module 提供对基本状态信息的访问

# --prefix= 指定安装路径,需要后面再指定一个nginx源码包名字目录,做版本号区分

make && make install                # 编译和安装

    4. 创建软链接

ln -s /application/nginx-1.12.2/ /application/nginx

# 去掉版本号,然开发不需要关注版本信息,软件升级的时候,对于开发来说没有任何影响

# 软件调用时候,也不需要关系版本号,软件升级也不影响开发和软件调用

    5. 测试

      1. 启动Nginx

/application/nginx/sbin/nginx -t                   # 检查配置文件是否正确

/application/nginx/sbin/nginx                      # 启动nginx

netstat -lntup | grep 80                               # 检查

      2. 检查

打开浏览器访问 host_ip                       # 访问主机外网IP地址

# 如果返回Nginx欢迎页面表示Nginx安装成功

curl -I host_ip                  # 检查是否隐藏了版本号和版本信息

Nginx安装过程中可能出现的错误有哪些?

  1. 启动Nginx报错,nginx: [emerg] getpwnam(“web_nginx”) faild

    原因: 没有添加nginx运行需要的用户

    解决方法: useradd web_nginx -s /sbin/nologin -M

  2. 编译过程报错,gcc不全导致错误

    解决方法: yum install -y gcc-c++

  3. 检查系统初始化时候有没有安装基础包

yun grouplist                # 查看已经安装的包

# 重点关注以下包,如果没安装通过 yum groupinstall -y "包名" 进行安装

# Base

# Compatibility libraries

# Debugging Tools

# Development tools

  4. 检查服务本地端口、进程和URL

lsof -i :80                      # 检查端口80是否有服务
ps -ef | grep nginx # 检查是否有nginx进程 # 检查浏览器输入的主机地址是否正确,是不是主机外网IP,端口连接符号是否是英文格式

  5. 查看错误日志信息

其日志文件路径: /application/nginx/logs/error.log

# 前提是Nginx安装目录规范为/application和软链接建立正确
# cat /application/nginx/logs/error.log

Web服务错误如何排错

  1. 客户端 ping 服务器ip地址

     ping 10.0.0.8                # 排除物理线路故障

  2. 客户端上telnet 服务器ip地址

    telnet 10.0.0.8 80         # 排除防火墙故障

  3. liunx客户端检查

    curl 10.0.0.8                 # 模拟浏览器请求

    # wget 10.0.0.8     会把网页下载下来

Nginx配置文件参数

位置: /application/nginx/conf/nginx.conf

worker_processes                       # 进程数量

events                                       # 模型

worker_connections                  # 一个进程连接最大连接数

http                                          # http相关配置

include                                     # 包含配置文件关键字

sendfile                                    # 高效分发模式

keepalive_timeout                    # 一个活着的连接保持时间

server                                      # 虚拟主机,对应一个站点

listen                                       # 监听端口

server_name                            # 域名,多个中间空格隔开

location                                   # 对域名后字段进行匹配

root                                         # 站点根目录

index                                       # 返回首页地址

error_page                               # 错误页面信息

什么是虚拟主机?

       配置文件中一个server字典对

    web服务器中独立的站点,这个站点对应独立的域名(也可能是IP或端口),具有独立的程序和资源目录,可独立对外提供服务让用户访问

  有三个分类

    1. 域名

      最为广泛,应用外部网站,通过请求头进行区分,直接ip地址访问,默认第一个虚拟主机,在http模块中,多个server就会有多个虚拟主机,通过域名来区分主机

    2. 端口

      应用于公司内部,网站后台,通过端口来区分主机

    3. IP

      不支持辅助ip,几乎不用

更改配置文件原则是什么?

  1. 备份原文件,格式为: 原配置文件名_时间_修改版本号,这个是规范

      /application/nginx/conf/nginx.conf{,._$(date +%F)_v1}

  2. 任何单独修改完成,第二次修改需要备份一次,版本号+1

  3. 有检查错误方法,先调用检查,一般为 -t 参数

  4. 服务通过 reload 进行优雅重启

  5. 出现错误立马回滚,回到上一个版本

如何实现资源下载展示?

  1. 在对应的server中,添加 autoindex on; 字段,在访问没有资源的情况下,将会就这个资源根目录下所有内容都会列出来,提供下载。正常没有这个参数,会提示403错误

Nginx如何配置多个站点?

  1. 对于多个站点,需要多个server,都写在主配置文件中显得不太专业
  2. 在conf配置目录下,创建extra目录,用于存放站点server
  3. 在主配置文件http中添加 include extra/*.conf ,统一包含extra中配置

Nginx状态查看

vim extra/status.conf         # 添加nginx状态的虚拟机

server{

    listen 80;
server_name status.benmenchuixue.com location /beimen { stub_status on; access_log off; #allow 172.16.1.0设置允许访问的ip段 #deny all,禁止访问
} } # 重启Nginx,然后访问这个域名实现获取nginx状态 # 这里联合监控使用,如果用户直接访问ip,通过rewrit跳转到首页,如果后面有有特殊标# 识将匹配到返回状态信息 # 注意html目录下index.html 和 50x.html会暴露软件版本信息,需要对这两个文件做信息脱敏处理,去掉特征信息展示  

如何禁止用户直接通过ip访问服务器?

vim forbid_ip.conf       # 写入一下内容

server {
listen 80 default;
server_name _;
return 500;
} # 直接通过ip访问,返回500错误

一键安装nginx

#!/bin/sh

# author: beimenchuixue
# email: 422083556@qq.com
# blog: http://www.cnblogs.com/2bjiujiu/ . /etc/init.d/functions install_path="/application"
nginx_package_name="nginx-1.12.2.tar.gz"
nginx_download_url="http://nginx.org/download/$nginx_package_name"
nginx_run_user="nginx"
down_path="$HOME/tools"
nginx_relay="pcre-devel openssl-devel gcc-c++"
change_name="www"
change_version="2.2.15" [ -d $down_path ] || {
mkdir $down_path -p
action "init download path is" /bin/true
} download_nginx() {
cd $down_path
wget -q $nginx_download_url
[ $? -eq 0 ] && {
action "download nginx is" /bin/true
} || {
action "download nginx is" /bin/false
exit 1
}
}
# download_nginx install_nginx_relay() {
yum install -y $nginx_relay &> /dev/null
[ $? -eq 0 ] || {
action "install_nginx_relay is" /bin/false
exit 2
}
action "install_nginx_relay is" /bin/true
}
# install_nginx_relay add_run_nginx_user() {
id $nginx_run_user &> /dev/null
[ $? -eq 0 ] || {
useradd $nginx_run_user -s /sbin/nologin -M
}
action "add_run_nginx_user is" /bin/true
}
# add_run_nginx_user untar_nginx() {
cd $down_path
tar -xf $nginx_package_name
[ $? -eq 0 ] || {
echo "$nginx_package_name not exit"
action "install nginx is" /bin/false
exit 3
}
action "tar -xf $nginx_package_name is" /bin/true
} hiden_version() {
cd $down_path
cd `echo "$nginx_package_name"|sed "s#.tar.gz##g"`
sed -i "s/`echo "$nginx_package_name"| sed "s/.tar.gz//g"\
|sed "s/nginx-//g"`/${change_version}/g" src/core/nginx.h
sed -i "s/nginx\//${change_name}\//g" src/core/nginx.h
sed -i "s/\"NGINX\"/\"`echo $change_name|tr '[a-z]' '[A-Z]'`\"/g" src/core/nginx.h
sed -i "s/Server: nginx/Server: ${change_name}/g" src/http/ngx_http_header_filter_module.c
sed -i "s/<center>nginx</<center>${change_name}</g" src/http/ngx_http_special_response.c
action "nginx hiden version is" /bin/true
}
# hiden_version install_nginx() {
cd $down_path
cd `echo "$nginx_package_name"|sed "s/.tar.gz//g"`
./configure \
--user=$nginx_run_user \
--group=$nginx_run_user \
--with-http_ssl_module \
--with-http_stub_status_module \
--prefix=$install_path/`echo "$nginx_package_name"|sed "s#.tar.gz##g"` &> /dev/null
[ $? -eq 0 ] && {
action "nginx configure is" /bin/true
} || {
action "nginx configure is" /bin/false
exit 4
} make &> /dev/null && {
action "nginx make is" /bin/true
} || {
action "nginx make is" /bin/false
exit 5
} make install &> /dev/null && {
action "nginx make install is" /bin/true
} || {
action "nginx make install is" /bin/true
eixt 6
} ln -s $install_path/`echo "$nginx_package_name"|sed "s#.tar.gz##g"` $install_path/nginx && {
action "create softlink is" /bin/true
} || {
action "create softlink is" /bin/false
exit 7
}
action "nginx install is" /bin/true
}
# install_nginx main() {
download_nginx
untar_nginx
hiden_version
install_nginx_relay
add_run_nginx_user
install_nginx
}
main

  

linux_nginx环境配置的更多相关文章

  1. uboot环境配置

    uboot环境配置 通过配置uboot让它在启动过程中从tftp获取内核和设备树,并从在加载内核之后把通过启动参数将"从nfs挂载根文件系统"传入内核.这个配置主要是通过uboot ...

  2. 史上最全Windows版本搭建安装React Native环境配置

    史上最全Windows版本搭建安装React Native环境配置 配置过React Native 环境的都知道,在Windows React Native环境配置有很多坑要跳,为了帮助新手快速无误的 ...

  3. Electron的环境配置

    原文地址http://huisky.com/blog/161218121551123 本文介绍了Electron的环境配置,包括Electron下载.nodejs下载安装.NPM+Bower安装配置. ...

  4. Python开发环境配置

    好久没有写博客了,自从6月份毕业后,进入一家做书法.字画文化宣传的互联网公司(www.manyiaby.com),这段时间一直在进行前端开发,对于后端的使用很少了,整天都是什么html.css.jav ...

  5. PHP_环境配置_python脚本_2017

    Apache配置 需要安装:VC2015 httpd-2.4.16-win32-VC14.zip VC14就是2015的环境. 又比如:php-5.6.12-Win32-VC11-x86 VC11就是 ...

  6. PHP环境配置

    PHP环境配置 1.Apache的安装 第一步: 1.    双击httpd-2.2.17-win32-x86-no_ssl.msi.出现 Windows 标准的软件安装欢迎界面,直接点“Next”继 ...

  7. Visual studio 通用开发环境配置:SDL,FFMPEG为例

    引言 每一个C++库的使用都是从开发环境的配置开始的,其实每个库的配置过程都是大同小异,总结下来有下面几个步骤: 下载库文件,这里假定是已经预先编译完成的. 配置库文件的包含目录(include)和库 ...

  8. windows 7下React Native环境配置

    React Native 是 Facebook 推出的一个用 Java 语言就能同时编写 ios,android,以及后台的一项技术,它可以做到实时热更新 .FaceBook 也号称这们技术是 “Le ...

  9. seL4环境配置

      转载声明:希望大家能够从这里收获知识之外,也能够体会到博主撰写博客的辛苦.个人博客势单力薄,对于强转甚至转载博客访问量高于原文的例子不在少数. 希望能够得到大家关注的同时,也能够稍微体谅一下博主的 ...

随机推荐

  1. 【HTTP协议】

    一.简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议 ...

  2. C++继承分析

    面向对象的三大特性之一就是继承,继承运行我么重用基类中已经存在的内容,这样就简化了代码的编写工作.继承中有三种继承方式即:public protected private,这三种方式规定了不同的访问权 ...

  3. mimtproxy和arpspoof实现局域网MITM

    本地环境 环境:kali系统 目标机器:192.168.0.101 局域网网关:192.168.0.1 当前网络网卡端口:wlan0 arp欺骗流程 命令行开启本地数据转发: echo > /p ...

  4. [转载]mysql中实现行号,oracle中的rowid

    mysql中实现行号需要用到MYSQL的变量,因为MySql木有rownumber. MYSQL中变量定义可以用 set @var=0 或 set @var:=0 可以用=或:=都可以,但是如果变量用 ...

  5. Java 中的函数式编程(Functional Programming):Lambda 初识

    Java 8 发布带来的一个主要特性就是对函数式编程的支持. 而 Lambda 表达式就是一个新的并且很重要的一个概念. 它提供了一个简单并且很简洁的编码方式. 首先从几个简单的 Lambda 表达式 ...

  6. 高可用高性能分布式文件系统FastDFS进阶keepalived+nginx对多tracker进行高可用热备

    在上一篇 分布式文件系统FastDFS如何做到高可用 中已经介绍了FastDFS的原理和怎么搭建一个简单的高可用的分布式文件系统及怎么访问. 高可用是实现了,但由于我们只设置了一个group,如果现在 ...

  7. Spring mvc之 发邮件(qq.163...)

    一. 邮件开发涉及到的一些基本概念 1.1.邮件服务器和电子邮箱 要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器.例如现在Internet很多提供邮件服务的厂商:sina.sohu ...

  8. BZOJ 1293: [SCOI2009]生日礼物【单调队列】

    1293: [SCOI2009]生日礼物 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2534  Solved: 1383[Submit][Stat ...

  9. HDU2988-Dark roads,HDU1233-还是畅通工程-最小生成树

    最小生成树: 中文名 最小生成树 外文名 Minimum Spanning Tree,MST 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的 ...

  10. [OpenCV学习笔记3][图像的加载+修改+显示+保存]

    正式进入OpenCV学习了,前面开始的都是一些环境搭建和准备工作,对一些数据结构的认识主要是Mat类的认识: [1.学习目标] 图像的加载:imread() 图像的修改:cvtColor() 图像的显 ...