当前位置: 安卓之星 -> Linux开发 -> Nginx编译安装

Nginx编译安装

作者:网络 发表于: 2017-03-09 点击: 291 次

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

1、下载二进制包

wget http://nginx.org/download/nginx-1.6.3.tar.gz

2、解压

tar zxvf nginx-1.6.3.tar.gz
cd nginx-1.6.3

3、配置

./configure \
–prefix=/usr/local/nginx \
–with-http_realip_module \
–with-http_sub_module \
–with-http_gzip_static_module \
–with-http_stub_status_module  \
–with-pcre

4、编译安装

make&make install

5、创建启动脚本

vim /etc/init.d/nginx
#!/bin/bash
# chkconfig: - 30 21
# description: http service.
# Source Function Library
. /etc/init.d/functions
# Nginx Settings
 
NGINX_SBIN="/usr/local/nginx/sbin/nginx"
NGINX_CONF="/usr/local/nginx/conf/nginx.conf"
NGINX_PID="/usr/local/nginx/logs/nginx.pid"
RETVAL=0
prog="Nginx"
 
start() {
        echo -n $"Starting $prog: "
        mkdir -p /dev/shm/nginx_temp
        daemon $NGINX_SBIN -c $NGINX_CONF
        RETVAL=$?
        echo
        return $RETVAL
}
 
stop() {
        echo -n $"Stopping $prog: "
        killproc -p $NGINX_PID $NGINX_SBIN -TERM
        rm -rf /dev/shm/nginx_temp
        RETVAL=$?
        echo
        return $RETVAL
}
 
reload(){
        echo -n $"Reloading $prog: "
        killproc -p $NGINX_PID $NGINX_SBIN -HUP
        RETVAL=$?
        echo
        return $RETVAL
}
 
restart(){
        stop
        start
}
 
configtest(){
    $NGINX_SBIN -c $NGINX_CONF -t
    return 0
}
 
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  reload)
        reload
        ;;
  restart)
        restart
        ;;
  configtest)
        configtest
        ;;
  *)
        echo $"Usage: $0 {start|stop|reload|restart|configtest}"
        RETVAL=1
esac
 
exit $RETVAL

6、开机启动

chmod 755 /etc/init.d/nginx
chkconfig –add nginx
chkconfig nginx on
service nginx start

7、更改nginx配置

清空之前的默认配置文件
> /usr/local/nginx/conf/nginx.conf
写入

user admin admin;  #nginx运行的用户和组
worker_processes 1; #nginx进程数,建议设置为等于CPU总核心数。
error_log /server/nginx/logs/nginx_error.log crit; #全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
pid /server/nginx/logs/nginx.pid;    #进程文件
worker_rlimit_nofile 51200;    #一个nginx进程打开的最多文件描述符数目,因为nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致。  

#工作模式与连接数上限
events
{
    use epoll;  #参考事件模型,use
    worker_connections 6000;  #单个进程最大连接数(最大连接数=连接数*进程数)
}


#设定http服务器
http
{
    include mime.types;  #文件扩展名与文件类型映射表
    default_type application/octet-stream;  #默认文件类型
    server_names_hash_bucket_size 3526;     #服务器名字的hash表大小
    server_names_hash_max_size 4096;        #服务器名字的hash表最大
    server_tokens off; #隐藏版本号
    log_format liujie '$remote_addr $http_x_forwarded_for [$time_local]'  #记录客户端的ip,客户端用户名称,访问时间和时区
    '$host "$request_uri" $status'         #用来记录请求的url状态
    '"$http_referer" "$http_user_agent"';  #记录从哪个页面链接访问过来了,记录客户端浏览器的相关信息
    sendfile on;     #开启高效文件传输模式
    tcp_nopush on;   #防止网络阻塞
    keepalive_timeout 30;  #长连接超时时间,单位是秒
    client_header_timeout 3m;
    client_body_timeout 3m;
    send_timeout 3m;
    connection_pool_size 256;
    client_header_buffer_size 1k;   #上传文件大小限制
    large_client_header_buffers 8 4k; #设定请求缓存
    request_pool_size 4k;
    output_buffers 4 32k;
    postpone_output 1460;
    client_max_body_size 10m;           #设定请求缓存
    client_body_buffer_size 256k;
    client_body_temp_path /server/nginx/client_body_temp;
    #nginx默认会用client_header_buffer_size这个buffer来读取header值,
    #如果header过大,它会使用large_client_header_buffers来读取,
    #如果设置过小HTTP头/Cookie过大 会报400 错误即:nginx 400 bad request。
    #求行如果超过buffer,就会报HTTP 414错误(URI Too Long)nginx接受最长的HTTP头部
    #大小必须比其中一个buffer大,否则就会报400的,HTTP错误(Bad Request)。
    proxy_temp_path /server/nginx/proxy_temp;
    fastcgi_temp_path /server/nginx/fastcgi_temp;
    fastcgi_intercept_errors on;
    tcp_nodelay on;          #防止网络阻塞
    gzip on;                 #开启gzip压缩输出
    gzip_min_length 1k;      #最小压缩文件大小
    gzip_buffers 4 8k;       #压缩缓冲区
    gzip_comp_level 5;       #压缩等级
    gzip_http_version 1.1;   #压缩版本
    gzip_types text/plain application/x-javascript text/css text/htm application/xml;#压缩类型
    include vhosts/*.conf;   开启虚拟主机
}


------------------------------------------------------------------------------

#FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。【我没用  写一下吧】
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;


proxy模块  我未用
#利用proxy模块给nginx加入缓存,提高http的相应请求效率
proxy_connect_timeout 90;
#后端服务器连接超时的时间,发起握手等候响应超时时间,
proxy_read_timeout 180;
#连接成功后,后端服务器处理请求的时间
proxy_send_timeout 180;
#在180秒内,后端服务器必须传完所有数据
proxy_buffer_size 256k;
#通常情况下,这部分被设置为第一部分应答的缓存区的大小,这个是应答头的大小
proxy_buffers 4 256k;
#缓存区的大小
proxy_busy_buffers_size 256k;
#高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 256k;
#设置在写入proxy_temp_path时数据的大小,预防一个工作进程在传递文件时阻塞太长
proxy_intercept_errors on;
#设置客户端应许看到缓存的出错信息
proxy_hide_header X-Powered-By;
#隐藏不必要的头,减少数据传输
server_name_in_redirect off;#让 nginx 在处理自己内部重定向时不默认使用 server_name 设置中的第一个域名;

8、创建vhosts文件

cd /usr/local/nginx/conf/
mkdir vhosts
cd vhosts
vim default.conf

9.配置文件参数介绍

upstream 1988.cool {
#upstream的负载均衡,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。
server 192.168.1.10:80 weight=3;
server 192.168.1.20:80 weight=1;
server 192.168.1.30:80 weight=2;
}

#虚拟主机的配置
server
{
listen 80;  #监听端口
server_name 1988.cool www.1988.cool; #域名可以有多个,用空格隔开
index  index.php index.html index.htm;   
root /data/www;     #项目目录
#php规则
location ~ \.php$ {
 include fastcgi_params;
 fastcgi_pass unix:/tmp/php.sock;             
 fastcgi_index index.php;
 fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name;
 }

#图片缓存时间+防盗链
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|)$
 {
 access_log off;
 expires 15d;
 valid_referers none blocked *.test.com *.aaa.com;
 if ($invalid_referer)
 {
 return 403;
 }
 }


#域名跳转
if ($host != 'www.a.com' ) {
rewrite ^/(.*)$ http://www.a.com/$1 permanent;
}
last – 基本上都用这个Flag。
break – 中止Rewirte,不在继续匹配
redirect – 返回临时重定向的HTTP状态302
permanent – 返回永久重定向的HTTP状态301
#JS和CSS缓存时间设置
location ~ .*\.(js|css)?$
{
expires 1h;
}
#日志格式设定
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
#定义本虚拟主机的访问日志
access_log /var/log/nginx/access.log liujie;  #主配置文件定义 log_format liujie '$remote_addr $http_x_forwarded_for [$time_local]'

#对 "/" 启用反向代理
location / {
proxy_pass http://127.0.0.1:88;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#以下是一些反向代理的配置,可选。
proxy_set_header Host $host;
client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,
proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k;
#设定缓存文件夹大小,大于这个值,将从upstream服务器传
}

#设定查看Nginx状态的地址
location /NginxStatus {
stub_status on;
access_log off;
}

#本地动静分离反向代理配置
#所有jsp的页面均交由tomcat或resin处理
location ~ .(jsp|jspx|do)?$ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8080;
}
#所有静态文件由nginx直接读取不经过tomcat或resin
location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$
{ expires 15d; }
location ~ .*.(js|css)?$
{ expires 1h; }
}
}

10、重新载入

service nginx reload
service php-fpm reload

相关文章

相关文章

赶快留言冒泡

  • 评论 (0)
  • 引用通告 (0)
目前还没有任何评论.
目前还没有任何Trackbacks和Pingbacks.
吐个泡浮上去.