FreeBSD cshrc tips

cshrc tips
作为csh/tcsh的配置文件,常用的包括系统级的/etc/csh.cshrc与用户级的~/.cshrc,后者的优先级高于前者。这里为便于描述,统称cshrc。

1. umask

umask称作用户权限屏蔽位,用于在创建文件或目录时设置默认权限。这里用一些操作来具体说明umask的用法:

> umask                                       # 查看当前umask值
22                                            # 22是csh的默认值
> touch file_umask22 && mkdir dir_umask22/
> ls -lod *_umask22
drwxr-xr-x  2 alphachi  alphachi  – 2 Oct 19 09:51 dir_umask22
-rw-r–r–  1 alphachi  alphachi  – 0 Oct 19 09:51 file_umask22

可以看到,当umask=22时,创建的文件默认权限为rw-r–r–(即644),创建的目录默认权限为rwxr-xr-x(即755)。
在这里,644和755这两个数字是根据“创建默认权限 = 系统默认权限 – umask取值”得出的:
644 = 系统默认权限(文件) – 22
755 = 系统默认权限(目录) – 22
也就是说,文件的系统默认权限为644 + 22 = 666(即rw-rw-rw-),目录的系统默认权限为755 + 22 = 777(即rwxrwxrwx)。这点可以通过将umask设置为0来验证:

> umask 0    # 将umask设置为0
> umask
0
> touch file_umask0 && mkdir dir_umask0/
> ls -lod *_umask0
drwxrwxrwx  2 alphachi  alphachi  – 2 Oct 19 09:52 dir_umask0
-rw-rw-rw-  1 alphachi  alphachi  – 0 Oct 19 09:52 file_umask0

因此可以根据需要在创建文件或目录前临时修改umask取值,例如:

> umask 2
> umask
2
A-desktop > touch file_umask2 && mkdir dir_umask2/
A-desktop > ls -lod *_umask2
drwxrwxr-x  2 alphachi  alphachi  – 2 Oct 19 09:56 dir_umask2     # 775 = 777 – 2
-rw-rw-r–  1 alphachi  alphachi  – 0 Oct 19 09:56 file_umask2    # 664 = 666 – 2

在cshrc中,默认会存在以下配置:

umask 22

需要注意的是,若在cshrc中无此条配置,umask的取值仍然为22,而不是0。

2. PAGER

PAGER是csh/tcsh的常见环境变量,用于设置默认的页面调度程序。以下为cshrc中的默认配置:

setenv PAGER more

将PAGER设置为more的缺点在于:页面输出完毕后若要重新阅读,必须重新调用页面或滚动终端。为了避免这些问题,可以将more更改为功能更为强大的less,即:

setenv PAGER less

与more相比,less的唯一“缺点”在于页面输出完毕后会高亮显示(END)标记,若要退出则需要额外多按一次q键。

3. autorehash

rehash是csh/tcsh的一条内部命令,可以重新计算与环境变量PATH相关的目录的哈希值;在这些目录中添加了新的可执行程序后,往往都需要执行此命令以刷新索引列表,否则系统将无法找到这些程序。
rehash经常在通过Ports安装了新的软件包后使用,例如:
# whereis zsh                          # 这里以通过Ports安装zsh为例
zsh: /usr/ports/shells/zsh
# cd /usr/ports/shells/zsh/
# make BATCH=yes install clean         # BATCH=yes表示使用默认配置编译而跳过编译选项的显示

# zs                                   # 输入zs后按Ctrl+d尝试补全
zstreamdump                            # 没有执行rehash前找不到zsh的相关命令
# rehash
# zs                                   # 再次输入zs后按Ctrl+d尝试补全
zsh         zsh-5.0.0   zstreamdump    # 执行rehash后即可找到相关命令

从版本6.18开始,csh/tcsh引入了新的特殊Shell变量autorehash,用于自动执行rehash操作。若要开启此功能,只需要在cshrc中添加:

set autorehash = always

取值always是指在命令补全和拼写校正时均自动执行rehash操作。若仅需在命令补全时自动执行,可将always更换为complete;若仅需在拼写校正时自动执行,可将always更换为correct。
需要注意的是,默认情况下此功能至少需要在FreeBSD 9.0-STABLE中才能开启,因为之前版本(如9.0-RELEASE)中tcsh的版本均低于6.18。

4. listjobs

listjobs是另一个有用的特殊Shell变量,用于控制任务挂起时的显示方式,以下举例说明:

> set | grep listjobs    # 命令无输出结果表示当前未设置listjobs
> ping www.freebsd.org
PING red.freebsd.org (69.147.83.34): 56 data bytes
64 bytes from 69.147.83.34: icmp_seq=0 ttl=49 time=332.853 ms
^Z                       # 按Ctrl+z挂起
Suspended
> set listjobs           # 仅开启变量listjobs(等于在cshrc中添加配置set listjobs)
> ping www.freebsdchina.org
PING www.freebsdchina.org (222.73.165.29): 56 data bytes
64 bytes from 222.73.165.29: icmp_seq=0 ttl=50 time=73.343 ms
^Z
[1]  – Suspended                     ping www.freebsd.org
[2]  + Suspended                     ping www.freebsdchina.org
> set listjobs = long    # 设置变量listjobs(等于在cshrc中添加配置set listjobs = long)
> ping www.google.com
PING www.google.com (74.125.128.106): 56 data bytes
64 bytes from 74.125.128.106: icmp_seq=1 ttl=45 time=35.502 ms
^Z
[1]    57930 Suspended                     ping www.freebsd.org
[2]  – 57946 Suspended                     ping www.freebsdchina.org
[3]  + 57951 Suspended                     ping www.google.com

可以看到,对于未设置、仅开启、设置变量listjobs这三种情况,任务挂起时的显示信息依次会更加详细。

5. 关于alias

alias为csh/tcsh引入的别名功能非常强大,详见一切皆alias。
虽然alias一般仅出现在cshrc中,但实际上它是csh/tcsh自带的内部命令,因此可以单独使用,例如:
> alias                             # 不使用任何参数则列出所有的别名条目
h       (history 25)
j       (jobs -l)
la      (ls -a)
lf      (ls -FA)
ll      (ls -lA)
> unalias h                         # 删除指定的别名条目
> alias reboot ‘shutdown -r now’    # 添加新的别名条目:
                                    # 在这里系统自带的reboot命令将不再生效,因为alias的优先级更高
j       (jobs -l)
l       (ls -alo)
la      (ls -a)
lf      (ls -FA)
ll      (ls -lA)
reboot  (shutdown -r now)
> \reboot                           # 在命令前添加转义字符\可以忽略alias设置而直接运行原始命令

注意手动输入的alias/unalias仅对当前Shell进程有效,若要始终生效应将其写入cshrc。
无论是采用何种方式配置alias,为防止其可能被Shell曲解,应该为真实命令部分(如上例中的shutdown -r now)的两端添加单引号,若在真实命令部分中存在变量替换,则应将单引号改为双引号。

6. 关于complete

与alias类似,complete也是csh/tcsh自带的内部命令;因此既可以单独使用,也可以写入cshrc。
顾名思义,complete是用于命令补全的,但与普通补全相比其功能更加强大,可以称之为高级补全。
在cshrc中,可以配置以下的普通补全:

if ($?prompt) then            # 仅对交互式Shell生效
    set autolist              # 按下Tab键直接补全
    set complete = enhance    # 补全时忽略大小写,认为-与_相同,将.、-、_作为单词分隔符;
                              # 若将enhance更换为igncase则仅忽略大小写
    set autoexpand            # 补全时参考history命令的输出
endif

配置生效后,将其与complete设置的高级补全进行比较:

> su                                   # 输入su后按Tab键的结果如下
su      sum     suspend                # 注意机器不同可能会出现更多输出
> complete -su* ‘p/0/(su suspend)/’    # 对关键字su设置高级补全:
                                       # -su*表示仅作用于关键字su,例如输入su空格后按Tab键是没有效果的
                                       # p表示作用位置,例如p/0在这里表示作用于su本身
                                       # ()用于限定补全条目,例如这里将补全条目限定于su与suspend
> complete                             # 查看高级补全条目
-su*    ‘p/0/(su suspend)/’
> su                                   # 高级补全下,输入su后按Tab键的结果如下
su      suspend
> uncomplete -su*                      # 删除高级补全条目

可以看到,两者的最大区别在于:在普通补全的基础上,高级补全能够实现更多的条件输出。除此之外,高级补全还能够实现很多普通补全难以实现的补全操作,例如:

> complete man ‘p/*/c/’    # 针对man命令的高级补全:
                           # p表示作用位置,p/*表示对输入的man空格后的任意位置的参数执行补全
                           # c表示补全候选项为当前系统内存在的所有命令
> man a                    # 输入man a后按Tab键的结果如下(此时p/*/c中*为1)
ac          addr2line   amd         ar          at          audit
accton      adduser     amq         arp         atacontrol  auditd
acpiconf    adjkerntz   ancontrol   arpaname    ath3kfw     auditreduce
acpidb      afmtodit    apm         as          atmconfig   authpf
acpidump    alias       apply       asa         atq         awk
addftinfo   alloc       apropos     asf         atrm
> man -w p                 # 输入man -w p后按Tab键的结果如下(此时p/*/c中*为2)
pac           pfbtops       pkg_info      powerd        ps
pagesize      pfctl         pkg_updating  poweroff      psroff
passwd        pflogd        pkg_version   ppp           pstat
paste         pftp          pkill         pppctl        purgestat
patch         pgrep         pmcannotate   pr            pushd
pathchk       pic           pmccontrol    praliases     pw
pawd          ping          pmcstat       praudit       pwait
pax           ping6         popd          pre-grohtml   pwd
pc-sysinstall pkg_add       portaudit     printenv      pwd_mkdb
pciconf       pkg_cleanup   portmaster    printf
periodic      pkg_create    portsnap      procctl
perror        pkg_delete    post-grohtml  procstat

再看一个非常实用的高级补全范例:在csh/tcsh中快速ssh到已保存主机。
1)创建或编辑~/.ssh/config,此文件可以为多个SSH主机保存不同的配置参数(详见man ssh_config):

Host firewall
    HostName     192.168.0.1     # 主机地址
    User         froot           # 登录用户名
    Port         50000           # 连接端口
    IdentityFile ~/.ssh/id/fw    # 调用的私钥文件
    Compression  yes             # 开启压缩
Host router
    HostName            192.168.10.1
    User                root
    Port                51000
    IdentityFile        ~/.ssh/id/router
    ServerAliveInterval 60       # 每60秒发送一次alive包以防止空闲掉线
Host switch
    HostName 192.168.100.1
    User     admin
    Port     54321

2)在cshrc中添加以下内容:

if (-e ~/.ssh/config) then     # 若~/.ssh/config存在则执行以下命令:
                               # 变量sshlist为由~/.ssh/config获取并格式化的主机列表
                               # p/1/($sshlist)将ssh空格后的第一个参数的补全内容限制在($sshlist)中
    set sshlist = `grep Host\  ~/.ssh/config | cut -d \  -f 2`
    complete ssh "p/1/($sshlist)/"
endif

3)通过source cshrc命令使编辑后的cshrc即时生效,然后查看补全效果:

> ssh                       # 输入ssh空格后按Tab键的结果如下
firewall router   switch    # 选择所需补全即可开始连接至对应主机
                            # 若在~/.ssh/config中添加了新的主机,也需要通过source cshrc命令即时生效

当然,complete命令的功能远不止于此,详见man tcsh中REFERENCE > Builtin command > complete一节。
注意与alias相同,手动输入的complete/uncomplete仅对当前Shell进程有效,若要始终生效应将其写入cshrc,此外引号的使用规则也是一样的。

7. 快捷键绑定

csh/tcsh中的快捷键设置实际上也是通过内部命令实现的,例如:

> bindkey -a    # 列出已绑定的快捷键("^"表示Ctrl,"^["表示Alt)
> bindkey -v    # 按照vi方式绑定快捷键
> bindkey -e    # 按照emacs方式绑定快捷键
> bindkey -h    # 显示所有帮助信息

与所有内部命令相同,bindkey既可以手动配置也可以写入cshrc中。
在控制台下,若需使用左Alt作为快捷键前缀,除了根据bindkey命令配置外,还应执行以下操作:
1)编辑/usr/share/syscons/keymaps/us.iso.kbd,将056行的首个lalt修改为meta;
2)执行kbdcontrol -l us.iso.kbd,也可在/etc/rc.conf中添加keymap=“us.iso.kbd”以使其永久生效。
注意此设置会带来一些“副作用”,例如无法再通过左Alt配合F功能键切换控制台,不过可以使用Ctrl+左Alt或右Alt替代。
8. 个性化提示符

提示符一节中已经对此做了详细的描述,这里仅说明如何针对X与控制台设置不同的提示符。
在cshrc中添加以下内容:

if ($?prompt) then
    if ($?DISPLAY) then    # 针对X:
                           # 特殊字符串%{\e]0;加\a%}的组合可以将两者中间的字符发送至终端模拟器
                           # 其他的%相关含义详见man tcsh中REFERENCE > Special shell variables > prompt一节
        set prompt = "%{\e]0;%l = %~\a%}%B%m %# %b"
    else                   # 针对控制台
        set prompt = "%B%m:%l%b %~ %B%# %b"
    endif
endif

以上设置生效后,在X下类似于XTerm的终端模拟器里,csh/tcsh的提示符中被发送的字符会显示于窗口标题栏,而在控制台下则会全部显示。

附:更多的cshrc范例

在Ports中提供了一个关于cshrc的包,位于/usr/ports/shells/tcshrc;安装之后,可以学到一些更高级的配置写法。

原文链接:https://wiki.freebsdchina.org/doc/c/cshrc_tips

FreeBSD 加密盘的使用

FreeBSD 加密盘的使用

yarshure@gmail.com

本文通过FreeBSD geom 框架gbde 和geli 对磁盘,文件的加密,保护计算机系统数据,使数据免受攻击者获得有用的资源。

一使用gbde对磁盘进行加密

1 添加内核选项

options GEOM_BDE

重新编译,安装内核

2 准备imgfile

#dd if=/dev/zero of=newimage bs=1k count=50k

生成1个50MB的image,文件大小=bs*count

3 使用newimage 生成文件系统

#mdconfig -a -t vnode -f newimage -u 0
# ls /dev/md0

验证是否生成

4 创建一个目录来保存 gbde Lock 文件

# mkdir /etc/gbde

初始化 gbde 分区

# gbde init /dev/md0 -I -L /etc/gbde/md0

5把加密分区和内核进行关联

# gbde attach /dev/md0 -l /etc/gbde/md0

6在加密设备上创建文件系统

#newfs -U -O2 /dev/md0.gbde
# mkdir /mnt/md0
#mount /dev/md0.gbde /mnt/md0

#df -H 验证

备份: 备份 newimage,/etc/gbde/md0

卸载:

#umount /mnt/md0
#gbde detach /dev/md0
#mdconfig -d 0

二使用geli加密磁盘

内核选项:

options GEOM_ELI
device crypto

重新编译内核,安装新内核,就可以了。
另外如果想通过模块方式加载,则可以在/boot/loader.conf文件里添加以下内容:
geom_eli_load="YES"

1 准备imgfile

#dd if=/dev/zero of=newimage bs=1k count=50k

生成1个50MB的image,文件大小=bs*count

2使用newimage 生成文件系统

#mdconfig -a -t vnode -f newimage -u 0

# ls /dev/md0 验证是否生成

3 生成主密钥:

#dd if=/dev/random of=/root/md0.key bs=64 count=1
# geli init -s 4096 -K /root/md0.key /dev/md0

如果密钥文件写作 “-”, 则表示使用标准输入。 下面是关于如何使用多个密钥文件的例子:

# cat keyfile1 keyfile2 keyfile3 | geli init -K – /dev/md0

4将md0和密钥关联

# geli attach -k /root/md0.key /dev/md0
Enter passphrase:

新的明文设备将被命名为 /dev/md0.eli。

# ls /dev/md0*
/dev/md0 /dev/md0.eli

5创建文件系统

# dd if=/dev/random of=/dev/md0.eli bs=1m
# newfs /dev/md0.eli
# mount /dev/md0.eli /mnt/md0

使用df -h 检查

6卸下卷并断开

# umount /mnt/md0
# geli detach md0.eli
#mdconfig -d 0

备份:备份newimage, /root/md0.key

详细参考:

FreeBSD 使用手册 17.6, 17.13.1 Manpage: gbde(8), newfs(8), geli(8), crypto(9), mdconfig(8)

原文链接:https://wiki.freebsdchina.org/doc/s/crypto_disk

FreeBSD 无控制台远程安装 – mfsBSD

FreeBSD 无控制台远程安装 – mfsBSD

主要参考:

FreeBSD 无远程控制台下的远程安装(中文)

Remote Installation of FreeBSD without a Remote Console(英文)

但是需要注意,这两篇文章是比较老的版本。mfsbsd-2.0的配置参数发生了变化。确定好静态IP信息以后,不知道网卡名字的前提下,需要自动探测网卡驱动

编辑 conf/interfaces.conf

mac_interfaces="ext1"
ifconfig_ext1_mac="00:15:5d:59:05:df"
ifconfig_ext1="inet 192.168.1.108 netmask 255.255.255.0 broadcast 192.168.1.255"

编写MAC地址的时候,FreeBSD探测出来的是小写字符,所以,如果写成类似,00:15:5D:59:05:DF, script/interfaces脚本中的 if [ “$_mac” = “$_cmac” ]; 就会失败,网卡就无法设置成功。

在conf/rc.conf中,不需要加入ifconfig_{$if}配置,当然不能忘记缺省路由:

defaultrouter="192.168.1.1"

在conf/loader.conf文件中,关闭hdcp

#mfsbsd.autodhcp="YES"
其他配置,authorized_keys,resolv.conf,ttys。。。。。。

最后:

# cd /root/mfsbsd-2.0
# make 或 make iso
FreeBSD 9.0以上版本,用bsdinstall安装,其他不再赘述。

原文链接:https://wiki.freebsdchina.org/howto/i/remote_installation_without_console

FreeBSD 9.0 的 GPT 纯 ZFS 安装

FreeBSD 9.0 的 GPT 纯 ZFS 安装

注意

由于 FreeBSD 9.0 采用了新的 bsdinstall,官方的 WIKI 指出,原先的 GPT ZFS boot 安装方法可能会不适用(未验证),故有此文。

本文介绍的是基于 GPT 以 ZFS 为根分区安装 FreeBSD 9.0-Release。
本文基于 官网这篇文章 翻译而来,并且实际操作过。
原文修订日期(注意更新): 2012-05-01 19:57:09 by PaulChvostek

4K对齐:

下文出现 gpart add 的地方增加参数 -a 4k
创建 zpool 之前,执行 gnop create -S 4096 ada0p3(第三个分区,-S为大写)
创建 zpool 时,/dev/gpt/disk0 改为 ada0p3.nop
zpool export 之后 import 之前,执行 gnop destroy ada0p3.nop

步骤

1.从 FreeBSD 的 CD1安装盘/DVD安装盘/USB Memstick 启动

2.进入安装界面后,到了 「Partitioning」(分区)这一步时,选择 「Shell」 选项

3.创建分区

#1.将硬盘设为 GPT 分区格式。
#
gpart create -s gpt ada0 #假设你有两块硬盘,这是第一块。
gpart create -s gpt ada1 #没有第二块硬盘则略过。
#2.在第一块硬盘上,分别创建标签(label)名为 boot0, swap0, disk0 这三个分区,最后把引导码写入第1个分区,即 boot0。
#
#gpart add:添加分区
#    -s 指定分区大小,-t 指定分区类型,
#    -l 指定标签名字,可以自由取名,记得前后一致,
#    ada0 是 /dev 下面的设备名字,这里是第一块硬盘。
#
#gpart bootcode: 安装引导码
#    -b -p (无需改动,照抄即可)
#    -i 指定分区的编号,从1开始。这里第一个创建的是 boot0,要写入 boot0, 所以是1。
#
gpart add -s 64K -t freebsd-boot -l boot0 ada0
gpart add -s 8G -t freebsd-swap -l swap0 ada0
gpart add -t freebsd-zfs -l disk0 ada0
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
#针对第二块硬盘,没有则略过。
gpart add -s 64K -t freebsd-boot -l boot1 ada1
gpart add -s 8G -t freebsd-swap -l swap1 ada1
gpart add -t freebsd-zfs -l disk1 ada1
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada1
#3.创建 zpool 和 zfs
#
#「zroot」是zpool的名字,可随意起名,注意保持一致。
#如果你有两块硬盘,可用 mirror(RAID 1) 模式组建。
zpool create -o altroot=/mnt zroot mirror /dev/gpt/disk0 /dev/gpt/disk1
#如果你只有一块硬盘
zpool create -o altroot=/mnt zroot /dev/gpt/disk0
#下列分区跟据需要自行修改
zfs create zroot/tmp
chmod 1777 /mnt/tmp
zfs create zroot/usr
zfs create zroot/var
zfs create zroot/home
exit

4.退出 shell 之后,继续安装

5.当问及「create partitions」(创建分区)时,选择「Shell」,然后直接输入 exit (刚才我们已经分好了)

6.安装和配置结束后,选择「Live CD」选项,以用户名 root 登录

7.修正挂载点和 cachefile(zpool缓存文件,记录了存储池的所有配置信息)

echo ‘zfs_enable="YES"’ >> /mnt/etc/rc.conf
echo ‘zfs_load="YES"’ >> /mnt/boot/loader.conf
echo ‘vfs.root.mountfrom="zfs:zroot"’ >> /mnt/boot/loader.conf
zfs unmount -a
zpool export zroot
zpool import -o cachefile=/tmp/zpool.cache -o altroot=/mnt zroot
zfs set mountpoint=/ zroot
cp /tmp/zpool.cache /mnt/boot/zfs/
zfs unmount -a
zpool set bootfs=zroot zroot
zpool set cachefile=” zroot
zfs set mountpoint=/tmp zroot/tmp
zfs set mountpoint=/usr zroot/usr
zfs set mountpoint=/var zroot/var
zfs set mountpoint=/home zroot/home

8.输入 reboot,完成安装

 

原文链接:https://wiki.freebsdchina.org/doc/z/gptzfsboot

安装与配置nginx下的php (PHP-FPM模式)

如何:安装与配置nginx下的php (PHP-FPM模式)

准备工作

使用FreeBSD的Ports安装软件时,请一定先把Ports更新到最新版本

#portsnap fetch update

如果你是第一次使用portsnap,可能需要先执行

#portsnap extract

安装并启用nginx服务

首先,安装nginx:

#cd /usr/ports/www/nginx
#make install clean

在出现的选项中,可能有一些你不熟悉的选项存在,如果你不明白各个选项的含义,可以用下面的默认值:

[X] HTTP_MODULE               Enable HTTP module
[X] HTTP_ADDITION_MODULE      Enable http_addition module
[X] HTTP_CACHE_MODULE         Enable http_cache module
[X] HTTP_DAV_MODULE           Enable http_webdav module
[X] HTTP_FLV_MODULE           Enable http_flv module
[X] HTTP_GEOIP_MODULE         Enable http_geoip module
[X] HTTP_GZIP_STATIC_MODULE   Enable http_gzip_static module
[X] HTTP_IMAGE_FILTER_MODULE  Enable http_image_filter module
[X] HTTP_PERL_MODULE          Enable http_perl module
[X] HTTP_RANDOM_INDEX_MODULE  Enable http_random_index module
[X] HTTP_REALIP_MODULE        Enable http_realip module
[X] HTTP_REWRITE_MODULE       Enable http_rewrite module
[X] HTTP_SECURE_LINK_MODULE   Enable http_secure_link module
[X] HTTP_SSL_MODULE           Enable http_ssl module
[X] HTTP_STATUS_MODULE        Enable http_stub_status module
[X] HTTP_SUB_MODULE           Enable http_sub module
[X] HTTP_XSLT_MODULE          Enable http_xslt module

在命令执行完成后,使用编辑器把下面的内容添加到/etc/rc.conf中

nginx_enable="YES"

安装PHP-FPM及相关连的包

以root身份继续执行下面的操作

#cd /usr/ports/devel/pcre
#make install clean
#cd /usr/ports/devel/libtool
#make install clean
#cd /usr/ports/lang/php5
#make install clean
#cd /usr/ports/lang/php5-extensions
#make install clean

在php5-extensions的config页面中,需要勾选PHP-FPM项。

执行完成后,把下面的代码加入/etc/rc.conf以启用PHP-FPM

php_fpm_enable="YES"

同时还要创建一个php.ini文件:

#cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini

同时可以编辑php.ini,把里面的timezone设置为Asia/Shanghai或者需要使用的时区。

启动服务

#/usr/local/etc/rc.d/php-fpm start
#/usr/local/etc/rc.d/nginx start

这样就成功启动了服务

配置虚拟主机运行PHP程序

准备网站目录

首先建立网站的目录和日志存放目录,日志即可以配置到/var/logs/nginx下面,也可以配置到任何你希望存放的位置。

mkdir /home/saharabear.com/public_html
mkdir /home/saharabear.com/logs

配置nginx.conf

可以直接参考下面的配置文件来修改/usr/local/etc/nginx/nginx.conf

user  nobody;
worker_processes  1;

error_log  logs/error.log;

pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  ‘$remote_addr – $remote_user [$time_local] "$request" ‘
                      ‘$status $body_bytes_sent "$http_referer" ‘
                      ‘"$http_user_agent" "$http_x_forwarded_for"’;

    sendfile        on;

    keepalive_timeout  65;

    gzip  on;

    # We define the virtual host here
    server {
        listen       208.62.123.122:80;
        server_name  saharabear.com www.saharabear.com;

        access_log  /home/saharabear.com/logs/access.log  main;

        location / {
            root   /home/saharabear.com/public_html;
            index  index.html index.htm index.php;
        }
    # Let nginx know how to handle PHP using fastcgi
        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /home/saharabear.com/public_html$fastcgi_script_name;
            # 上面这一行很重要,别忘了修改这里
            include        fastcgi_params;
        }

        location ~ /\.ht {
            deny  all;
        }
    }
}

重新启动nginx服务器就可以了

#/usr/local/etc/rc.d/nginx restart

配置虚拟主机运行使用Symfony2框架的PHP程序

对于PHP的Symfony2框架,配置nginx可能会有一些不同,比如Symfony2使用app.php和app_dev.php作为前端入口等等,可以参考下面的代码配置Symfony2的PHP程序

    server {
        listen       80;
        server_name  test.saharabear.com ;
        root /home/test.saharabear.com/symfony/web;
        charset utf-8;

        access_log  /home/test.saharabear.com/logs/access.log  main;
        error_log /home/test.saharabear.com/logs/errors.log;
        # strip app.php/ prefix if it is present
        rewrite ^/app\.php/?(.*)$ /$1 permanent;

        location / {
          index app.php;
          try_files $uri @rewriteapp;
        }

        location @rewriteapp {
          rewrite ^(.*)$ /app.php/$1 last;
        }

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        location ~ ^/(app|app_dev)\.php(/|$) {
          fastcgi_pass   127.0.0.1:9000;
          fastcgi_split_path_info ^(.+\.php)(/.*)$;
          include fastcgi_params;
          fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
          fastcgi_param  HTTPS              off;
        }

        # deny access to .htaccess files, if Apache’s document root
        # concurs with nginx’s one
        #
        location ~ /\.ht {
            deny  all;
        }
    }

原文链接:https://wiki.freebsdchina.org/howto/n/php_php-fpm_nginx