设为首页 收藏本站
查看: 851|回复: 0

[经验分享] nginx摘录

[复制链接]

尚未签到

发表于 2015-7-26 13:36:59 | 显示全部楼层 |阅读模式
  一、nginx安装和配置
1, nginx windows安装启动
cd d:\nginx
start nginx
对nginx进程控制可以
nginx -s [ stop | quit | reopen | reload ]
2, nginx LINUX 安装
./configure
make
make install
Nginx默认安装到/usr/local/nginx目录下.可以通过./configure --help看编译选项
3, nginx 启动
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
-c 指定了配置文件的路径
4, nginx停止
从容停止:kill -QUIT `/usr/local/webserver/nginx/logs/nginx.pid`
快速停止:kill -TERM `/usr/local/webserver/nginx/logs/nginx.pid` 或者 kill -INT `/usr/local/webserver/nginx/logs/nginx.pid`
强制停止:pkill -9 nginx
5, nginx平滑重启
检测配置文件是否正确: nginx -t
kill -HUP `/usr/local/webserver/nginx/logs/nginx.pid`
6, nginx 的信号控制
TERM,INT 快速关闭
QUIT 从容关闭
HUP 平滑重启,重新加载配置文件
USR1 重新打开日志文件,在切割日志时用途很大
USR2 平滑升级可执行程序
WINCH 从容关闭工作进程
7, nginx的平滑升级(不中断服务)
* 将新版本编译安装到旧版本的Nginx安装路径中。之前,最好备份旧的可执行文件
* kill -USR2 旧版本的Nginx进程ID
* 旧版本nginx的主进程将命名他的pid文件为.oldbin(/usr/local/webserver/nginx/nginx.pid.oldbin),然后执行新版本的nginx可执行程序
* 这时,新的旧的都在运行,kill -WINCH 旧的版本进程 使得从容关闭
* 慢慢的新的版本开始工作
* 还可以选择恢复用旧的版本:
      kill -HUP 旧的主进程号:Nginx将在不重新载入配置文件的情况下启动工作进程
      kill -QUIT 新的主进程号:从容关闭其他工作进程
      kill -TERM 新的主进程号:强制退出

二、Nginx的配置与优化
1, nginx完整配置示例
#运行用户和组
user www www;
#指定工作衍生进程数(一般等于CUP总核或者总核数的两倍)
worker_processes 8;   
#全局错误日志及PID文档 [debug | info | notice | warn | error | crit]
error_log logs/error.log notice;   
pid logs/Nginx.pid;
#指定文件描述符数量
worker_rlimit_nofile 51200;
#工作模式及连接数上限
events {
# 使用的网络I/O模型,linux推荐epool;freebsd推荐kquequ模型
use epoll;
#允许的链接数
worker_connections 1024;   
}
#设定http服务器,利用他的反向代理功能提供负载均衡支持   
http
{
# 开两 php-cgi 服务,端口连接方式速度快,socket方式稳定
    # 使用 lighttpd 的 spawn-fcgi 起的fast-cgi
    # weight 是设置权重
    upstream phpfastcgi {
server unix:/tmp/php-fastcgi0.sock weight=1;
server unix:/tmp/php-fastcgi1.sock weight=1;
# server 127.0.0.1:8000   weight=1;
# server 127.0.0.1:8001   weight=1;
}
# mime 类型 和 默认 header-type
include       mime.types;
default_type application/octet-stream;
# 默认 header-charset
charset utf-8;
# 一些限制
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;
# sendfile 应该是 lighttpd 的 sendfile 是一个意思
    sendfile on;
tcp_nopush     on;
keepalive_timeout 60;
tcp_nodelay on;
# 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;
# 开启gzip
gzip on;
gzip_min_length 1k;
gzip_buffers     4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types       text/plain application/x-javascript text/css application/xml;
gzip_vary on;
#limit_zone crawler $binary_remote_addr 10m;
# 定义日志格式
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
# 定义一个虚拟机
server
{
# 监听端口
listen       80;
# 虚拟机名
server_name klpt-test.domain.com;
# 如打开的是一个目录,默认的搜 索文件的顺序
        index index.html index.htm index.php;
# 虚拟机指向的路径
root /data/www/klpt-test.domain.com/webroot;
# 如果访问的路径不存在,那么 rewrite给根目录的 index.php,路径以参数url来传递
location / {
index index.html index.php;
if (-f $request_filename) {
break;
}
if (!-f $request_filename) {
rewrite ^/(.+)$ /index.php?url=$1 last;
break;
}
}
# 配置PHP
location ~ \.php$ {
fastcgi_pass   phpfastcgi;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/www/klpt-test.domain.com/webroot$fastcgi_script_name;
include        fastcgi_params;
}
# 图片缓存 30 天
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
expires      30d;
}
# js 和 css 缓存 1 小时
        location ~ .*\.(js|css)$ {
expires     1h;
}
}
server
{
# 定义的虚拟机监听端口是 443
listen       443;
server_name klpt.domain.com;
index index.html index.htm index.php;
root /data/www/klpt.domain.com/webroot;
# 开启 ssl 服务
# 命令 openssl req -new -x509 -nodes -out klpt-sqladmin.crt -keyout klpt-sqladmin.key
ssl on;
ssl_certificate /data/etc/nginx7/conf/klpt-sqladmin.crt;
ssl_certificate_key /data/etc/nginx7/conf/klpt-sqladmin.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers   on;
#limit_conn   crawler 20;
# 如果访问的路径不存在,那么rewrite给根目录的 index.php,路径以参数url来传递
location / {
index index.html index.php;
if (-f $request_filename) {
break;
}
if (!-f $request_filename) {
rewrite ^/(.+)$ /index.php?url=$1 last;
break;
}
}
# php config
location ~ \.php$ {
fastcgi_pass   phpfastcgi;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/www/klpt.domain.com/webroot$fastcgi_script_name;
# 开启 https ,需要此配置
            fastcgi_param HTTPS on;
include        fastcgi_params;
}
# 将静态文件缓存 30 天
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ {
expires      30d;
}
# log
access_log /data/log/nginx/nginx_access/nginx_klpt_access.log access;
}
# 静态服
    server
{
listen       80;
server_name klpt-static.domain.com;
index index.html index.htm;
root /data/www/klpt-static.domain.com;
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ {
expires      30d;
}
}
server
{
listen       443;
server_name klpt-sqladmin.domain.com;
index index.html index.htm index.php;
root /data/www/klpt-sqladmin.domain.com;
ssl on;
ssl_certificate /data/etc/nginx7/conf/klpt-sqladmin.crt;
ssl_certificate_key /data/etc/nginx7/conf/klpt-sqladmin.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers   on;
location ~ \.php$ {
fastcgi_pass   phpfastcgi;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/www/klpt-sqladmin.domain.com$fastcgi_script_name;
# 开启 https ,需要此配置
            fastcgi_param HTTPS on;
include        fastcgi_params;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ {
expires      30d;
}
access_log /data/log/nginx/nginx_access/nginx_sqladmin_access.log access;
}
}
2, nginx虚拟机配置
一个简化的例子
http
{
    server
    {
        listen          80 default;
        server_name     _ *;
        access_log      logs/default.access.log combined;
        location / {
            index   index.html;
            root    /data0/htdocs/htdocs;
        }
    }
}
配置基于IP的虚拟主机
给eth0网卡设备添加两个IP别名192.168.8.43 和192.168.8.44
ifconfig eth0:1 192.168.8.43 netmask 255.255.255.0 up
route add -host 192.168.8.43 dev eth0:1
ifconfig eth0:2 192.168.8.44 netmask 255.255.255.0 up
route add -host 192.168.8.44 dev eth0:2
配置
http
{
    #第一个虚拟主机
    server
    {
        listen          192.168.8.43:80;
        server_name     192.168.8.43;
        access_log      logs/server1.access.log combined;
        location / {
            index   index.html;
            root    /data0/htdocs/server1;
        }
    }
    #第二个虚拟主机
    server
    {
        listen          192.168.8.44:80;
        server_name     192.168.8.44;
        access_log      logs/server2.access.log combined;
        location / {
            index   index.html;
            root    /data0/htdocs/server2;
        }
    }
    #第三个虚拟主机
    server
    {
        listen          192.168.8.45:80;
        server_name     192.168.8.45;
        access_log      logs/server3.access.log combined;
        location / {
            index   index.html;
            root    /data0/htdocs/server3;
        }
    }
}
配置基于域名的虚拟主机
aaa.domain.com 第一个虚拟主机处理
bbb.otherdomain.com 第二个虚拟主机处理
第三个处理除了aaa.domain.com之外的*.domain.com和www.domain.com domain.com
http
{
    #11111111
    server
    {
        listen          80 default;
        server_name     aaa.domain.com;
        access_log      logs/aaa.domain.com.access.log combined;
        location / {
            index   index.html;
            root    /data0/htdocs/aaa.domain.com;
        }
    }
    #2222222
    server
    {
        listen          80 default;
        server_name     bbb.otherdomain.com;
        access_log      logs/aaa.domain.com.access.log combined;
        location / {
            index   index.html;
            root    /data0/htdocs/bbb.otherdomain.com;
        }
    }
    #33333
    server
    {
        listen          80 default;
        server_name     www.domain.com domain.com *.domain.com;
        access_log      logs/domain.com.access.log combined;
        location / {
            index   index.html;
            root    /data0/htdocs/domain.com;
        }
    }
}
3, nginx的日志文件配置与切割
log_format main '$remote_addr – $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" ' ;
记录真实IP
log_format main '$http_x_forwarded_for – $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" ' ;
日志分割
mv /data1/logs/access.log /data1/logs/20090318.log
kill -USR1 nginx进程号
写成脚本
#!/bin/bash
logs_path = "/data1/logs/"
mkdir -p ${logs_path}${date -d "yesterday" + "%Y"}/{date -d "yesterday" + "%m"}/
mv ${logs_path}/access.log ${logs_path}${date -d "yesterday" + "%Y"}/{date -d "yesterday" + "%m"}/access_${date -d "yesterday" + "%Y%m%d"}.log
kill -USR1 `cat /usr/local/webserver/nginx/nginx.pid`
crontab -e
00 00 * * * /bin/bash the.sh

三、Nginx反向代理和负载均衡
nginx的upstream目前支持4种方式的分配
1)、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2)、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
2)、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
3)、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
4)、url_hash(第三方)
upstream bbs.linuxtone.org {#定义负载均衡设备的Ip及设备状态
    server 127.0.0.1:9090 down;
    server 127.0.0.1:8080 weight=2;
    server 127.0.0.1:6060;
    server 127.0.0.1:7070 backup;
}
在需要使用负载均衡的server中增加代码
    proxy_pass http://bbs.linuxtone.org/;
每个设备的状态设置为:代码:
    1.down 表示单前的server暂时不参与负载
   
    2.weight 默认为1.weight越大,负载的权重就越大。
   
    3.max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
   
    4.fail_timeout:max_fails次失败后,暂停的时间。
   
    5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。nginx支持同时设置多组的负载均衡,用来给不用的server来使用。
   
    client_body_in_file_only 设置为On 可以讲client post过来的数据记录到文件中用来做debug
   
    client_body_temp_path 设置记录文件的目录 可以设置最多3层目录
   
    location 对URL进行匹配.可以进行重定向或者进行新的代理 负载均衡
   
代码实例
……….
#loadblance my.linuxtone.org
       upstream  my.linuxtone.org  {
       ip_hash;
       server   127.0.0.1:8080;
       server   192.168.169.136:8080;
       server   219.101.75.138:8080;
       server   192.168.169.117;
       server   192.168.169.118;
       server   192.168.169.119;
     }
…………..
include          vhosts/linuxtone_lb.conf;
………
#vi proxy.conf
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 50m;
client_body_buffer_size 256k;
proxy_connect_timeout 30;
proxy_send_timeout 30;
proxy_read_timeout 60;

proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
proxy_max_temp_file_size 128m;
proxy_store on;
proxy_store_access   user:rw  group:rw  all:r;
#nginx cache               
client_body_temp_path  /data/nginx_cache/client_body 1 2;
proxy_temp_path /data/nginx_cache/proxy_temp 1 2;#vi linuxtone_lb.conf
server
    {
        listen  80;
        server_name my.linuxtone.org;
        index index.php;
        root /data/www/wwwroot/mylinuxtone;
        if (-f $request_filename) {
            break;
           }
        if (-f $request_filename/index.php) {
          rewrite (.*) $1/index.php break;
        }
        error_page 403 http://my.linuxtone.org/member.php?m=user&a=login;
        location / {
           if ( !-e $request_filename) {
               proxy_pass http://my.linuxtone.org;
               break;
           }
           include /usr/local/nginx/conf/proxy.conf;
        }
}

四、Nginx Redirect
将所有linuxtone.org与abc.linuxtone.org域名全部自跳转到http://www.linuxtone.org代码
server
       {
               listen       80;
               server_name  linuxtone.org abc.linuxtone.org;
               index index.html index.php;
               root  /data/www/wwwroot;
               if ($http_host !~ "^www\.linxtone\.org$") {
                       rewrite  ^(.*)    http://www.linuxtone.org$1 redirect;
                 }
       }
参考
http://bbs.chinaunix.net/viewthread.php?tid=1319835&highlight=nginx

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-90831-1-1.html 上篇帖子: 制作维护Nginx脚本,并设置为开机自启动。 下篇帖子: nginx 安装手记
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表