Добрый день. Попытаюсь максимально подробно описать условия возникновения проблемы.
Имеется машина под управлением лицензионной Windows 8.1
На ней установлен VirtualBox 4.3.26
На VirtualBox установлена консольная версия Opensuse 13.2 с поднятым LAMP сервером
В Opensuse есть папка /srv/www/htdocs/ в которую смотрит Apache2
Имеются несколько виртуальных хостов:
/srv/www/htdocs/vhosts/host1
/srv/www/htdocs/vhosts/host2
/srv/www/htdocs/vhosts/host3
VirtualBox имеет статический IP адрес и в файле hosts на windows прописаны виртуальные хосты host1, host2, host3 ссылающиеся на IP VirtualBox
В виртуальной машине добавлена общая папка D:\\vhosts\
внутри которой папки host1, host2, host3
общая папка подключается в папку /srv/www/htdocs/vhosts/
таким образом папки из windows замещаются папками из Linux
/srv/www/htdocs/vhosts/host1 замещается содержимым D:\\vhosts\host1\
/srv/www/htdocs/vhosts/host2 замещается содержимым D:\\vhosts\host2\
/srv/www/htdocs/vhosts/host3 замещается содержимым D:\\vhosts\host3\
Таким образом получаем что Lamp сервер запущенный под OpenSuse при обращении к виртуальным хостам обращается к файлам на Windows.
Все папки и файлы имеют права 777 и виртуальный хост прекрасно работает с файлами
Теперь суть проблемы.
Если на web сервере (из под винды) изменить любой текстовый файл например CSS или JS то если открыть этот файл через редактор vi на opensuse - изменения будут, а если открыть этот файл в браузере через apache то изменений не будет. Сразу говорю что проблема не в кеше, так как даже если его очищать или заходить через инкогнито все тоже самое. В итоге как бы мы не меняли файл, то сама OpenSuse видит изменения в файле а Apache не видит (не касается PHP файлов) при этом если:
сделать umount /srv/www/htdocs/vhosts/ и примонтировать ее снова
или
открыть файл через vi изменить его под linux и сохранить
или
открыть файл через vi не изменить но выйти командой :wq
или
переименовать файл, попытаться загрузить его через браузер, получить ошибку и потом переименовать обратно
то файл загружается обновленным, но если его снова изменить то все пляски повторяются снова.
Всю голову сломал что это может быть и если честно понятия не имею как это исправить.
В общем в итоге решился обратиться к интернет умам.
apache2ctl -M
Вывод:
Loaded Modules:
core_module (static)
access_compat_module (static)
so_module (static)
http_module (static)
mpm_prefork_module (static)
unixd_module (static)
systemd_module (static)
authz_host_module (shared)
actions_module (shared)
alias_module (shared)
auth_basic_module (shared)
authz_user_module (shared)
authn_file_module (shared)
authz_groupfile_module (shared)
autoindex_module (shared)
cgi_module (shared)
dir_module (shared)
include_module (shared)
log_config_module (shared)
mime_module (shared)
negotiation_module (shared)
setenvif_module (shared)
status_module (shared)
userdir_module (shared)
asis_module (shared)
rewrite_module (shared)
php5_module (shared)
authn_core_module (shared)
reqtimeout_module (shared)
authz_core_module (shared)
socache_shmcb_module (shared)
если скачать файл в самом Linux через wget то он так же будет без изменений, но в конце файла появятся непонятные символы:
через vi если его открыть то там будет ^@^@^@^@
если через notepad++ то какие-то нулы
вот все сервисы на моей машине
after-local.service loaded active exited /etc/init.d/after.local Compatibility
apache2.service loaded active running The Apache Webserver
cron.service loaded active running Command Scheduler
dbus.service loaded active running D-Bus System Message Bus
dm-event.service loaded active running Device-mapper event daemon
getty@tty1.service loaded active running Getty on tty1
haveged.service loaded active running Entropy Daemon based on the HAVEGE algorithm
kmod-static-nodes.service loaded active exited Create list of required static device nodes for the current kernel
lvm2-lvmetad.service loaded active running LVM2 metadata daemon
mysql.service loaded active running MySQL server
nscd.service loaded active running Name Service Cache Daemon
ntpd.service loaded active running NTP Server Daemon
postfix.service loaded active running Postfix Mail Transport Agent
rc-local.service loaded active exited /etc/init.d/boot.local Compatibility
sshd.service loaded active running OpenSSH Daemon
SuSEfirewall2.service loaded active exited SuSEfirewall2 phase 2
SuSEfirewall2_init.service loaded active exited SuSEfirewall2 phase 1
systemd-journald.service loaded active running Journal Service
systemd-logind.service loaded active running Login Service
systemd-modules-load.service loaded active exited Load Kernel Modules
systemd-random-seed.service loaded active exited Load/Save Random Seed
systemd-remount-fs.service loaded active exited Remount Root and Kernel File Systems
systemd-sysctl.service loaded active exited Apply Kernel Variables
systemd-tmpfiles-setup-dev.service loaded active exited Create static device nodes in /dev
systemd-tmpfiles-setup.service loaded active exited Create Volatile Files and Directories
systemd-udev-root-symlink.service loaded active exited Rule generator for /dev/root symlink
systemd-udev-settle.service loaded active exited udev Wait for Complete Device Initialization
systemd-udev-trigger.service loaded active exited udev Coldplug all Devices
systemd-udevd.service loaded active running udev Kernel Device Manager
systemd-update-utmp.service loaded active exited Update UTMP about System Reboot/Shutdown
systemd-user-sessions.service loaded active exited Permit User Sessions
systemd-vconsole-setup.service loaded active exited Setup Virtual Console
user@0.service loaded active running User Manager for UID 0
vboxadd.service loaded active exited LSB: VirtualBox Linux Additions kernel modules
wicked.service loaded active exited wicked managed network interfaces
wickedd-auto4.service loaded active running wicked AutoIPv4 supplicant service
wickedd-dhcp4.service loaded active running wicked DHCPv4 supplicant service
wickedd-dhcp6.service loaded active running wicked DHCPv6 supplicant service
wickedd-nanny.service loaded active running wicked network nanny service
wickedd.service loaded active running wicked network management service daemon
При этом стоит отметить что если изменения сделать в PHP файле причем неважно какие, можно просто чисто html написать, то они сразу отображаются без проблем.
Кроме того если файл размером меньше ~260 байт то все изменения так же моментально проходят. Если файл больше этого размера то проблемы возвращаются.
Еще один забавный факт заключается в том что если сделать файл меньше 260 байт (удалив строки) и изменить, то как и говорилось выше изменения появятся сразу, но если после изменения вернуть строки или дописать другие, то в браузере приходит старый файл до любых изменений.