linux_nginx环境配置

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

  

上一篇:maven + selenium + jenkins 教程收集


下一篇:智能指针(二):shared_ptr实现原理