编译安装Nginx及基本配置

一、编译安装Nginx

# yum install pcre-devel openssl-devel zlib-devel gcc gcc-c++ -y        ==>编译前所需要的包

# groupadd -r nginx        ==>新建nginx系统组

# useradd -r -g nginx nginx        ==>nginx系统帐号

# ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --user=nginx --group=nginx --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi

--prefix=/usr/local/nginx        ==>安装部署后的根目录,默认为/usr/local/nginx

--conf-path=/etc/nginx/nginx/nginx.conf        ==>配置文件的放置路径,默认<prefix>/conf/nginx.conf

--user=nginx        ==>指定worker进程运行时所属的用户

--group=nginx         ==>指定worker进程运行是所属的组

--error-log-path=/var/log/nginx/errpr.log        ==>error日志放置位置

--http-log-path=/var/log/nginx/access.log        ==>access日志放置的位置

--pid-path=/var/run/nginx/nginx.pid        ==>pid文件的存放路径;默认<prefix>/logs/nginx.pid

--lock-path=/var/lock/nginx.lock        ==>lock文件的放置路径;默认<prefix>/logs/nginx.lock

--with-http_ssl_module        ==>提供HTTPS服务;该模块的安装依赖于OpenSSL开源软件

--with-http_stub_status_module        ==>能够获取Nginx自上次启动以来的工作状态

--with-http_gzip_static_module        ==> 如果采用gzip 模块把一些文档进行gzip 格式压缩后再返回给客户端,那么对同一个文件每次都会重新压缩,这是比较消耗服务器CPU 资源的. gzip static 模块可以在做gzip 压缩前,先查看相同位置是否有已经做过gzip 压缩的.gz 文件,如果有,就直接返回。这样就可以预先在

服务器上做好文档的压缩,给CPU 减负

--wiht-http_flv_modle        ==>可以在向客户端返回响应肘,对FLV 格式的视频文件在header 头做一些处理,使得客户端可以观看、拖动FLV 视频

--with-http_mp4_module        ==>使客户端可以观看、拖动MP4 视频

--http-client-body-temp-path=/var/tmp/nginx/client        ==>set path to store http client request body temporary files

--http-proxy-temp-path=/var/tmp/nginx/proxy        ==>Nginx 作为HTTP 反向代理服务器时,上游服务器产生的HTTP 包体在需要临时存放到磁盘文件时,这样的临时文件将放到该路径下;默认<prefix>/proxy _temp

--http-fastcgi-temp-path=/var/tmp/nginx/fastcgi        ==>Fastcgi 所使用临时文件的放置目;默认<prefix>/fastcgi_temp

# make && make install

给nginxSysV脚本,修改程序安装路径、pidfile、lockfile路径

NGINX_CONF_FILE="/etc/nginx/nginx.conf"        ==>SysV脚本中配置文件位置修改

  1. #!/bin/sh
  2. #
  3. # nginx - this script starts and stops the nginx daemon
  4. #
  5. # chkconfig: - 85 15
  6. # description: Nginx is an HTTP(S) server, HTTP(S) reverse \
  7. # proxy and IMAP/POP3 proxy server
  8. # processname: nginx
  9. # config: /etc/nginx/nginx.conf
  10. # config: /etc/sysconfig/nginx
  11. # pidfile: /var/run/nginx.pid
  12. # Source function library.
  13. ./etc/rc.d/init.d/functions
  14. # Source networking configuration.
  15. ./etc/sysconfig/network
  16. # Check that networking is up.
  17. ["$NETWORKING"="no"]&& exit 0
  18. nginx="/usr/local/nginx/sbin/nginx"
  19. prog=$(basename $nginx)
  20. pidfile="/var/run/nginx/nginx.pid"
  21. NGINX_CONF_FILE="/etc/nginx/nginx.conf"
  22. [-f /etc/sysconfig/nginx ]&&./etc/sysconfig/nginx
  23. lockfile=/var/lock/nginx.lock
  24. make_dirs(){
  25. # make required directories
  26. options=`$nginx -V 2>&1 | grep ‘configure arguments:‘`
  27. for opt in $options;do
  28. if[`echo $opt | grep ‘.*-temp-path‘`];then
  29. value=`echo $opt | cut -d "=" -f 2`
  30. if[!-d "$value"];then
  31. # echo "creating" $value
  32. mkdir -p $value && chown -R $user $value
  33. fi
  34. fi
  35. done
  36. }
  37. start(){
  38. [-x $nginx ]|| exit 5
  39. [-f $NGINX_CONF_FILE ]|| exit 6
  40. make_dirs
  41. echo -n $"Starting $prog: "
  42. daemon $nginx -c $NGINX_CONF_FILE
  43. retval=$?
  44. echo
  45. [ $retval -eq 0]&& touch $lockfile
  46. return $retval
  47. }
  48. stop(){
  49. echo -n $"Stopping $prog: "
  50. killproc $prog -QUIT
  51. retval=$?
  52. echo
  53. [ $retval -eq 0]&& rm -f $lockfile
  54. return $retval
  55. }
  56. restart(){
  57. configtest ||return $?
  58. stop
  59. sleep 1
  60. start
  61. }
  62. reload(){
  63. configtest ||return $?
  64. echo -n $"Reloading $prog: "
  65. killproc $nginx -HUP
  66. RETVAL=$?
  67. echo
  68. }
  69. force_reload(){
  70. restart
  71. }
  72. configtest(){
  73. $nginx -t -c $NGINX_CONF_FILE
  74. }
  75. rh_status(){
  76. rh_status_q(){
  77. rh_status >/dev/null 2>&1
  78. }
  79. case"$1"in
  80. start)
  81. rh_status_q && exit 0
  82. $1
  83. ;;
  84. stop)
  85. rh_status_q || exit 0
  86. $1
  87. ;;
  88. restart|configtest)
  89. $1
  90. ;;
  91. reload)
  92. rh_status_q || exit 7
  93. $1
  94. ;;
  95. force-reload)
  96. force_reload
  97. ;;
  98. status)
  99. rh_status
  100. ;;
  101. condrestart|try-restart)
  102. rh_status_q || exit 0
  103. ;;
  104. *)
  105. echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
  106. exit 2
  107. esac

# chmod +x /etc/rc.d/init.d/nginx        ==>在路径下添加的Sys脚本赋予执行权限

# ss -tnl        ==>确认80端口无人占用

#

# service nginx start

# /usr/local/nginx/sbin/nginx -t        ==>测试配置文件,需要创建某些文件夹

# cd /usr/local/nginx/html        ==>主页目录

二、虚拟主机

虚拟主机相关的配置:

1、server{}        ==>定义一个虚拟主机

2、listen        ==>监听的端口,

listen address[:port][default_server] ssl

backlog=number:指明TCP协议backlog队列的大小。默认为-1,表示不设置。在TCCp建立三次握手过程中,进程还没有开始处理监听句柄,这时backlog队列将会放置这些新连接。可如果backlog队列已满,还有新的客户端试图通过三次握手建立TCP连接,这时客户端会建立连接失败。

rcvbuf=size:设定监听的句柄的SO_RCVBUF参数;接收缓冲大小

sndbuf=size:设定监听句柄的SO_SNDBUF参数

deferred:用户发起建立连接请求,并且完成了TCP三次握手,内核也不会为了这次的连接调度worker进程来处理,只有用户真发送请求数据时(内核已经在网卡中收到请求数据包)内核才会唤醒worker进程处理这个连接。这个参数使用于大并发的情况,它减 轻了worker进程的负担。当请求数据来临时,worker进程才会开始处理这个连接。只有确认上面所说的应用场景复合自己的业务需求时,才可以使用它。

bind:绑定当前端口/地址对,如127.0.0.1:8000。只有同时对一个端口监听多个地址时才会生效。

ssl:在当前监听的端口上建立的连接必须基于SSL协议

3、server_name name [...];        ==>在开始处理一个HTTP请求时,Nginx会取出head头中的Host,与每个server中的server_name进行匹配,以此决定哪个server块来处理这个请求。服务器名,后可跟多个主机;名称还可以使用通配符和正则表达式(~匹配);

(1)先做精确匹配;www.magedu.com

(2)左侧通配符匹配;*.magedu.com

(3)右侧通配符匹配;www.*

(4)正则表达式匹配,~^.*\.magedu\.com$

(5)如果Host与server_name都不匹配,优先选择listen选项后加入[default | default_server]的server块,找到匹配listen端口的第一个server块

(6)server_name"":表示匹配没有Host这个HTTP头部的请求

4、location [=|~|~*|^~]/url {...}或location @name       ==>允许根据用户请求的URI来匹配定义的各location,匹配到时此请求将被相应的location块中的配置所处理

=:精确匹配检查

^~:URI的前半部分匹配,不检查正则表达式

~:正则表达式模式匹配,区分字符大小写

~*:正则表达式模式匹配,不区分字符大小写

匹配优先级:精确匹配=、^~、~、~*、由不带符号的URL进行左侧匹配

5、root        ==>设置web资源路径映射;用于指明请求的URL所对应的文档的目录路径;也可以用于loction或server中

6、alias path        ==>用于location配置段,定义路径别名

注意:root表示指明路径为对应location的"/"URL;alias表示路径映射,即location中的URL是相对alias所指明的路径而言

7、index file        ==>默认主页  index index.html

8、error_page code [...] [=code]URI | @name

根据http状态码重定向错误页面

=[code]:以指定的响应码进行响应;省略code以新请求的资源状态码为响应码

error_page 404 /404.html

9、try_files

try_files path1[,path2...] URI

三、常用配置

1、基于IP的访问控制:ngx_http_access_module

Syntax:        allow|deny address | CIDR | unix: | all;

Default:        —

Context:       http, server, location, limit_except

允许192.168.1.0/24网段除了192.168.1.1的主机,允许10.1.1.0/16和IPv6的2001:0db8::/32,并拒绝所有

规则范围从小到大,从上往下匹配

2、基于用户的basic认证:ngx_http_auth_basic_module

Syntax:        auth_basic string | off;

Default:       auth_basic off;

Context:       http, server, location, limit_except

# htpasswd -c /usr/local/nginx/users/htpasswd status        ==>在/usr/local/nginx/users用httpd的密码生成工具生成密码

3、基于gzip实现响应报文压缩:ngx_http_gzip_module

gzip on | off;        ==>启用和关闭gzip压缩;默认关闭

gzip_buffers number size;        ==>压缩是buffer的大小和个数;默认gzip_buffers 32 4k|16 8k

gzip_comp_level level;        ==>压缩级别,默认为1

gzip_disable regex ...;        ==>哪些不进行压缩

gzip_min_length length;        ==>最小多大的包可以压缩;默认为20字节

gzip_http_version 1.0 | 1.1;        ==>协议;默认1.1

gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;        ==>默认关闭

gzip_types mime-type ...;        ==>对那种压缩;默认 gzip_types text/html;

gzip_vary on | off;        ==>Accept-Encoding;默认关闭

4、定制响应首部:ngx_http_headers_module

http://blog.sina.com.cn/s/blog_4560b80b0100nldc.html

这个模块允许设置任意的HTTP头。这个模块主要是处理浏览器的本地缓存,通过这个输出HTTP Headers Response,让浏览器如何处理本地缓存

expires仅仅适用于200, 204, 301, 302,和304应答

  add_header name value [always];
  expires

5、定制访问日志:ngx_http_log_module

Syntax:        access_log path [format [buffer=size [flush=time]] [if=condition]];

access_log path format gzip[=level] [buffer=size] [flush=time] [if=condition];

access_log syslog:server=address[,parameter=value] [format [if=condition]];

access_log off;

Default:        access_log logs/access.log combined;

Context:       http, server, location, if in location, limit_except

定制出于httpd的combined格式相同的日志内容

6、定义合法引用:ngx_http_referer_module

none:直接输入网址打开的,允许引用

blocked:有首部没有值;如”http://”或“https://”;允许引用

server_names:如上图中的红框中所能匹配到的主机,允许引用

7、URL重写:ngx_http_rewrite_module

rewrite regex replacement [flag];

flag参数含义:

(1)last:无需客户端重发请求,在服务端重新检查规则

(2)break:无需客户端重发请求,不检查规则直接响应给客户端,避免循环重写

(3)redirect:返回一个临时重定向代码302,让客户端重新发请求

(4)permanent:返回一个永久重定向代码301,让客户端重新发请求

if (condition) { ... }

=:等于

!=:不等于

~:匹配模式,区分大小写的匹配

~*:匹配模式,不区分大小写的匹配

!~:不匹配模式则为真,匹配则为假,区分大小写

!~*:不匹配模式则为真,匹配则为假,不区分大小写

-f | !-f:是否存在且是文件

-d | !-d:是否存在且是目录

-e | !-e:是否存在

-x | !-x:是否存在且可执行

如果正则表达式中包含"}" 或":" 则需要用单引号或双引号括起来

return code [text];

return code URL;

return URL;

返回响应代码或其它的响应正文,响应正文或重定向的URL可以包含变量

set $variable value;      ==>设定一个自定义变量

8、ngx_http_stub_status_module

active conections:活动连接数。

acceept:已接收的

hander:已处理的

request:总共处理的请求数

reading:正在接收客户端请求      c->s

write:正在发送响应,s->c

wating:空闲的客户端连接

9、https:ngx_http_ssl_module

# cd /etc/pki/CA/private/

# (umask 077;openssl genrsa -out cakey.pem 4096)

# openssl req -new -x509 -key cakey.pem -out cacert.pem -days 3656

#  mv cacert.pem ../

# touch {index.txt;serial}

# echo "01" > serial

# mkdir /etc/nginx/certs/

# cd /etc/nginx/certs/

#  (umaks 077;openssl genrsa -out nginx.ley 2048)

# openssl req -new -key nginx.key -out nginx.csr

# openssl ca -in nginx.csr -out nginx.pem

·

时间: 2024-11-08 20:32:46

编译安装Nginx及基本配置的相关文章

编译安装 Nginx 及简单配置

1.安装依赖包 yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make //pcre,openssl 可选择编译安装 2.创建应用用户 useradd -M -s /sbin/nologin nginx 3.安装 nginx #tar xf nginx-1.14.0.tar.gz -C /usr/local/src/ #cd /usr/local/src/nginx-1.14.0/ #./configure --pr

RedHat 7 编译安装Nginx 1.12并配置WEB站点

一.安装环境 1.操作系统版本:Red Hat Enterprise Linux Server release 7.2 (Maipo) 2.Nginx版本:nginx-1.12.2.tar.gz 3.pcre版本:pcre-8.42.tar.gz 4.zlib版本:zlib-1.2.11.tar.gz 5.openssl版本:openssl-1.0.2l.tar.gz 二.安装说明 官网上关于Nginx的依赖包说明如下: 三.安装过程 1.安装gcc:yum install gcc-c++ -y

编译安装nginx时配置开机自启

详细编译安装nginx请参考[Nginx目录结构与配置文件详解]以及[Nginx安装部署],在这里就进行简单安装 安装Nginx 环境介绍 操作系统: [[email protected] ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) [[email protected] ~]# uname -a Linux localhost.localdomain 3.10.0-957.el7.x86_64 #1 SMP T

&lt;深入剖析Nginx&gt; 编译安装nginx 以及使用eclipse编译开发nginx

明年就要找工作了,看看经典的开源项目-nginx,图书馆借了本<深入剖析Nginx>,开始研读,边读边做笔记. 第一篇是nginx的环境配置相关 参考帖子:Nginx模块开发---Linux使用eclipse编译,调试Nginx 文章5:Linux下使用Eclipse进行Nginx 模块开发 具体是参考上面的帖子和书,下面大概讲下步骤: 1. 经典的三个步骤,来编译安装nginx: 先下载源码: 官网下载链接 ./configure --with-debug --prefix=/home/zy

linux编译安装nginx

linux下编译安装nginx,从nginx官网下载nginx原代码,解压到某个目录,执行如下命令 # ./configure --prefix=/usr/local/nginx 配置nginx编译生成的目录,nginx的shell脚本将存储在/user/local/nginx/sbin目录,配置文件将存储在/user/local/nginx/conf目录下 nginx支持正则匹配路径,依赖pcre包,编译之前请先安装此包.如果要使用https,还需要openssl.如果要使用gzip,需要zl

编译安装Nginx+Mariadb+Memcache+php实现Nginx与Memcache结合

前端Nginx配置: 1.安装nginx 创建Nginx用户.创建/var/tmp/nginx目录并编译安装 useradd -r nginx mkdir /var/tmp/nginx tar xf nginx-1.4.7.tar.gz ./configure --prefix=/usr --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log -

centos7下编译安装nginx并实现日志轮替

centos7编译安装nginx: 首先确保系统上存在编译安装使用的必要工具运行:  # yum groupinstall "development tools" "server platform development" 1 下载PCRE version 4.4 - 8.40 (ngx_http_rewrite_module模块需要)    # wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/p

开发人员学Linux(5):CentOS7编译安装Nginx并搭建Tomcat负载均衡环境

1.前言在上一篇讲述了JMeter的使用,在本篇就可以应用得上了.本篇将讲述如何编译安装Nginx并利用前面的介绍搭建一个负载均衡测试环境.2.软件准备Nginx-1.12.0,下载地址:https://nginx.org/download/nginx-1.12.0.tar.gzTomcat8(本系列已介绍过如何下载和安装)JMeter(本系列已介绍过如何下载和使用)注:VirtualBox宿主机IP为"192.168.60.16,虚拟机IP为:192.168.60.198,虚拟机通过桥接方式接

Centos7 编译安装 Nginx、MariaDB、PHP

前言 本文主要大致介绍CentOS 7下编译安装Nginx.MariaDB.PHP.面向有Linux基础且爱好钻研的朋友.技艺不精,疏漏再所难免,还望指正. 环境简介: 系统: CentOS 7,最小化安装 IP: 192.168.170.128 Nginx: 1.6.1 MariaDB: 5.5.39 PHP: 5.5.16 1.准备工作 1.1.系统硬件准备 尽管Linux能最大化发挥硬件资源,但RHEL/CentOS随着版本增加对最低硬件的配置也越来越高[1].RHEL7/CentOS最低